from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField, RadioField, SelectField, DateField, MultipleFileField, HiddenField
from wtforms.validators import ValidationError, DataRequired, Email, EqualTo
import sqlalchemy as sa
from app import db
from app.models import User, PBX
import email_validator

class SearchCCForm(FlaskForm):
    codcliente = StringField('Codice Cliente', validators=[DataRequired()])
    submit = SubmitField('Ricerca')

class SearchNOForm(FlaskForm):
    numord = StringField('Ns. Numero Ordine', validators=[DataRequired()])
    submit = SubmitField('Ricerca')
    
class SearchMACForm(FlaskForm):
    macadd = StringField('MAC Address PBX', validators=[DataRequired()])
    submit = SubmitField('Ricerca')
    
class SearchSNForm(FlaskForm):
    def getPBX():
        lista = PBX.lista_PBX()
        valori = []
        for pbx in lista:
            valori.append((pbx.codPBX, pbx.codPBX+" - "+pbx.nomePBX))
        return valori
    modello = SelectField('Modello PBX', choices=getPBX(), validators=[DataRequired()])
    sernum = StringField('Numero seriale PBX', validators=[DataRequired()])
    submit = SubmitField('Ricerca')

class SearchLicenze(FlaskForm):
    codcliente = HiddenField()
    submit = SubmitField('Licenze')

class LoginForm(FlaskForm):
    username = StringField('Nome utente', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    remember_me = BooleanField('Ricordami')
    submit = SubmitField('Accedi')
    
class insPIN(FlaskForm):
    ragsoc = StringField('Ragione sociale', validators=[DataRequired()])
    codcliente = StringField('Codice cliente', validators=[DataRequired()])
    email = StringField('Email cliente', validators=[DataRequired(), Email()])
    nsrif = StringField('Nostro riferimento', validators=[DataRequired()])
    ordcl = StringField('Numero ordine cliente', validators=[DataRequired()])
    dataordcl = DateField('Data ordine cliente', validators=[DataRequired()])
    filePIN = MultipleFileField('File PIN', validators=[DataRequired()])
    submit = SubmitField('Inserisci PIN')
    def crea_cliente(self):
        cliente = {
            "rs" : self.ragsoc.data,
            "cc" : self.codcliente.data,
            "em" : self.email.data,
            "ns" : self.nsrif.data,
            "oc" : self.ordcl.data,
            "doc" : self.dataordcl.data }
        return cliente
    
class genLic(FlaskForm):
    ragsoc = StringField('Ragione sociale', validators=[DataRequired()])
    email = StringField('Email cliente', validators=[DataRequired(), Email()])
    nome = StringField('Nome', validators=[DataRequired()])
    cognome = StringField('Cognome', validators=[DataRequired()])
    macPBX = StringField('MAC Address PBX', validators=[DataRequired()])
    licatt = StringField('Chiave licenza attuale', validators=[DataRequired()])
    filePIN = MultipleFileField('File PIN', validators=[DataRequired()])
    submit = SubmitField('Genera licenza')
    