from flask_wtf import FlaskForm
from wtforms import StringField, SelectField, TextAreaField, PasswordField
from wtforms.validators import DataRequired, Optional, Email, Length, EqualTo

from app.models import Sponsor


class StaffUserForm(FlaskForm):
    email = StringField("Correo electrónico", validators=[DataRequired(), Email()])
    password = PasswordField("Contraseña temporal", validators=[DataRequired(), Length(min=8)])
    confirm_password = PasswordField(
        "Confirmar contraseña",
        validators=[DataRequired(), EqualTo("password", message="Las contraseñas no coinciden")],
    )


class SponsorForm(FlaskForm):
    name = StringField("Nombre de la organización", validators=[DataRequired(), Length(max=255)])
    sponsor_type = SelectField(
        "Tipo",
        choices=[
            ("ngo", "ONG"),
            ("pharma", "Farmacéutica"),
            ("lab", "Laboratorio"),
            ("provider", "Prestador de salud"),
            ("other", "Otro"),
        ],
        default="other",
    )
    status = SelectField(
        "Estado",
        choices=[
            ("prospect", "Prospecto"),
            ("active", "Activo"),
            ("inactive", "Inactivo"),
        ],
        default="prospect",
    )
    country = StringField("País", validators=[Optional(), Length(max=60)])
    contact_name = StringField("Contacto", validators=[Optional(), Length(max=255)])
    contact_email = StringField("Correo de contacto", validators=[Optional(), Email()])
    notes = TextAreaField("Notas", validators=[Optional()])

    def populate_sponsor(self, sponsor: "Sponsor" = None) -> "Sponsor":
        sponsor = sponsor or Sponsor()
        self.populate_obj(sponsor)
        return sponsor
