from flask import Flask, render_template, request, redirect, flash, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, SelectField, SubmitField
from wtforms.validators import DataRequired, Email, Regexp, Optional
import smtplib
import ssl
from email.message import EmailMessage
import os
from dotenv import load_dotenv

# Carregar variáveis do .env
load_dotenv()

app = Flask(__name__)
app.secret_key = 'supersecretkey'  # Substitua por algo seguro em produção

# Formulário
class CadastroForm(FlaskForm):
    tipo = SelectField('Tipo de Cadastro', choices=[('revendedor', 'Revendedor'), ('consumo', 'Consumo')], validators=[DataRequired()])
    nome = StringField('Nome', validators=[DataRequired()])
    cnpj = StringField('CNPJ', validators=[Optional(), Regexp(r'^\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}$', message="CNPJ inválido")])
    inscricao_estadual = StringField('Inscrição Estadual', validators=[Optional(), Regexp(r'^\d{9}$', message="Inscrição Estadual deve ter 9 dígitos")])
    telefone = StringField('Telefone', validators=[DataRequired()])
    produtos = StringField('Produtos', validators=[DataRequired()])
    email = StringField('E-mail para contato', validators=[DataRequired(), Email()])
    endereco = StringField('Endereço', validators=[Optional()])
    cidade = StringField('Cidade', validators=[Optional()])
    estado = StringField('Estado', validators=[Optional()])
    submit = SubmitField('Enviar')

# Rota principal
@app.route('/form/', methods=['GET', 'POST'])
def form():
    form = CadastroForm()
    if form.validate_on_submit():
        content = f"""
Tipo: {form.tipo.data}
Nome: {form.nome.data}
CNPJ: {form.cnpj.data or 'N/A'}
Inscrição Estadual: {form.inscricao_estadual.data or 'N/A'}
Endereço: {form.endereco.data or 'N/A'}
Cidade: {form.cidade.data or 'N/A'}
Estado: {form.estado.data or 'N/A'}
Telefone: {form.telefone.data}
Produtos: {form.produtos.data}
Email: {form.email.data}
"""
        try:
            msg = EmailMessage()
            msg.set_content(content)
            msg['Subject'] = 'CADASTRO DE REVENDA'
            msg['From'] = os.getenv("EMAIL_FROM")
            msg['To'] = 'sac@lumixpro.com.br'

            context = ssl.create_default_context()
            with smtplib.SMTP_SSL(os.getenv("SMTP_SERVER"), int(os.getenv("SMTP_PORT")), context=context) as server:
                server.login(os.getenv("EMAIL_USER"), os.getenv("EMAIL_PASSWORD"))
                server.send_message(msg)

            flash('Cadastro enviado com sucesso!', 'success')
            return redirect(url_for('form'))
        except Exception as e:
            flash(f'Erro ao enviar o cadastro: {e}', 'danger')

    return render_template('form.html', form=form)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
