#from .models import *
from .views import *
from django import forms
from django.conf import settings
from crispy_forms.helper import FormHelper
from django.forms import ModelForm, Select, Textarea, HiddenInput
from crispy_forms.bootstrap import InlineRadios
from crispy_forms.layout import *
#from bootstrap_datepicker_plus import DatePickerInput
#from codicefiscale import isvalid as isvalid_cf, build as build_cf
from codicefiscale import codicefiscale
import re, datetime
from datetime import date

import os

SN_CHOICES = (
    (True,  'Si'),
    (False, 'No'))


class FiltraLibreriaForm(forms.Form):

    choices_libreria = ([('','')])
    choices_libreria.extend([(x.id, x.denominazione ) for x in Libreria.objects.all().order_by('denominazione')])
    
    sel_libreria=forms.CharField(required=True, label="Libreria", widget=forms.Select(choices=choices_libreria))      

class CreafatturaForm(ModelForm):

    class Meta:
        model = Fattura
        fields = '__all__'
        widgets = {
            'fa_note': forms.Textarea(attrs={'rows': 10, 'cols': 120, 'class': 'large-textarea'}), 'fa_data': forms.HiddenInput(),
            'fa_libreria': forms.HiddenInput(), 'fa_annoscol': forms.HiddenInput(),
            
        }
        
class FatturaInsertForm(forms.Form):
    classe=forms.IntegerField(required=False, label="Classe")
    importo=forms.DecimalField(max_digits=8, decimal_places=2, label="Importo")
    note=forms.CharField(max_length=100, label='Note', required=False)    

class CrispyFatturaInsertForm(FatturaInsertForm):
    
    def __init__(self, *args, **kwargs):
            
        super().__init__(*args, **kwargs)
        


        self.helper = FormHelper()
        self.helper.layout = Layout(
                    Row(
                    Column('classe', css_class='form-control col-md-2'),
                    Column('importo', css_class='form-control col-md-4', style='padding-right:60px;'),
                    Column('note', css_class='form-control col-md-4', style='padding-right:60px;'),                    
                    css_class='form-row col-md-12', style='padding-bottom:20px;padding-left:20px;' 
                    ),                                                       
                    Row(           
                    Column(Submit('submit', 'Salva i dati'), css_class='form-control col-md-6 mb-6'),
                    css_class='form-row ', style='padding-top:60px;padding-bottom:30px;'
                    ),                                                                                                   
        )

class PrenotaForm(ModelForm):

    class Meta:
        model = Prenotazione
        fields = '__all__'
        labels = {'pr_codfiscale': 'Cod.fiscale alunno',  'pr_libreria': 'Cartolibreria',                
                  'pr_classe': 'Classe (numero)','pr_data_richiesta':'data_richiesta',
                  'pr_facoltativo': 'Testo facoltativo',
                  }
        localized_fields = '__all__'

        widgets = {                    
                      
                    'pr_libreria':  forms.HiddenInput, 'pr_data_richiesta':  forms.HiddenInput, 
                    'pr_spesa':  forms.HiddenInput, 'pr_annoscol':forms.HiddenInput , 'pr_stato': forms.HiddenInput(),                 
                   }
            
    def clean(self):

        data =self.cleaned_data
        if data.get('pr_classe'):
            classe= data.get('pr_classe')
            if not classe in range(1,6):
                raise forms.ValidationError('Inserire un numero compreso tra 1 e 5 per la classe.')                 
        #controllo codice fiscale  alunno

        if data.get('pr_codfiscale'):
            codice_fiscale = data.get('pr_codfiscale').upper()
            if not codicefiscale.is_valid(codice_fiscale):
                raise forms.ValidationError('Codice fiscale alunno non valido')  
 
        
        if not self.instance.pk: #fase di inserimento'
            recs=Prenotazione.objects.filter(pr_codfiscale=codice_fiscale, pr_annoscol=settings.ANNO_LAVORO)
            if recs.count() >0:
                raise forms.ValidationError("Già presente una prenotazione per l'alunno con questo codice fiscale.") 

        #controllo residenza alunno da file con confronto con lista residenti elementari
        filename=settings.BASE_DIR + '/alunni.csv'  
        file1 = open(filename, "r")

        # read file content
        readfile = file1.read() 
        # checking condition for string found or not
        if not codice_fiscale in readfile: 
            raise forms.ValidationError('Codice fiscale non trovato nella lista degli alunni residenti nel Comune.') 

        data['pr_codfiscale'] = codice_fiscale
                            
        if  str(data.get('selscuola')) == '0':
            raise forms.ValidationError('Selezionare la scuola frequentata.')             

        if self.errors:
            print("Errori di validazione form prenotazione libri ")            
            print(self.errors)
                    
        return data 
    
class CrispyPrenotaForm(PrenotaForm):
    
    def __init__(self, *args, **kwargs):
            
        super().__init__(*args, **kwargs)
        


        self.helper = FormHelper()
        self.helper.layout = Layout(
                    Row(
                    Column('pr_annoscol', css_class='disabled', style='padding-left:20px;'),
                    css_class='form-row col-md-0' 
                    ),                   
                    Row(
                    Column('annosc', css_class='col-md-0 bg-info', style='padding-left:40px;'),    
                    css_class='form-row col-md-0' 
                    ),                  
                    Row(
                    Column('pr_data_richiesta', css_class='form-control col-md-2'),
                    Column('pr_libreria', css_class='form-control col-md-4', style='padding-right:60px;'),
                    Column('pr_spesa', css_class='form-control col-md-4', style='padding-right:60px;'),                    
                    Column('pr_scuola', css_class='form-control disabled'),             
                    css_class='form-row col-md-0', style='padding-left:20px;' 
                    ),                                                       
                    Row(
                    Column('pr_codfiscale', css_class='col-6 col-md-4 form-control '),
                    css_class='form-row', style='padding-bottom:110px;padding-left:20px;' 
                    ),
                    Row(
                    Column('selscuola', css_class='form-control col-md-6 disabled', style='padding-right:60px;'),
                    css_class='form-row', style='padding-bottom:40px;padding-left:20px;' 
                    ),                      
                    Row(
                    Column('pr_classe', css_class='col-4 col-md-2 form-control ' ), 
                    css_class='form-row' , style='padding-bottom:90px;padding-left:20px;' 
                    ),                 
                    Row(
                    Column('pr_facoltativo', css_class='col-md-0 form-control col-sm-4 mb-6'),  
                    css_class='form-row ', style='padding-left:20px;' 
                    ) ,
                    Row(           
                    Column(Submit('submit', 'Salva i dati'), css_class='form-control col-md-6 mb-6'),
                    css_class='form-row ', style='padding-top:60px;padding-bottom:10px;padding-left:20px;'
                    ),                                                                                                   
        )
           
