from datetime import datetime
from . import db

class Campanha(db.Model):
    __tablename__ = 'campanhas'

    id = db.Column(db.Integer, primary_key=True)
    nome = db.Column(db.String(150), nullable=False)
    politico_principal = db.Column(db.String(150), nullable=False)
    cargo = db.Column(db.String(100), nullable=False)
    partido = db.Column(db.String(100), nullable=True)
    coligacao = db.Column(db.String(150), nullable=True)
    slogan = db.Column(db.String(255), nullable=True)
    
    # Campos Estratégicos (Admin 1)
    politicos_aliados = db.Column(db.Text, nullable=True)
    politicos_concorrentes = db.Column(db.Text, nullable=True)
    municipio = db.Column(db.String(100), nullable=False, default='Manaus')
    estado = db.Column(db.String(2), nullable=False, default='AM')
    data_inicio = db.Column(db.Date, nullable=True)
    data_fim = db.Column(db.Date, nullable=True)
    
    meta_total = db.Column(db.Integer, default=2500)
    meta_por_cadastrador = db.Column(db.Integer, default=25)
    limite_profundidade_rede = db.Column(db.Integer, default=5)
    permitir_subcadastrador = db.Column(db.Boolean, default=True)
    ativa = db.Column(db.Boolean, default=True)
    criado_em = db.Column(db.DateTime, default=datetime.utcnow)

    # Relationships
    usuarios = db.relationship('Usuario', backref='campanha', lazy=True, cascade="all, delete-orphan")
    pessoas = db.relationship('Pessoa', backref='campanha', lazy=True, cascade="all, delete-orphan")

    def to_dict(self):
        return {
            'id': self.id,
            'nome': self.nome,
            'politico_principal': self.politico_principal,
            'cargo': self.cargo,
            'partido': self.partido,
            'coligacao': self.coligacao,
            'slogan': self.slogan,
            'municipio': self.municipio,
            'estado': self.estado,
            'meta_total': self.meta_total,
            'meta_por_cadastrador': self.meta_por_cadastrador,
            'permitir_subcadastrador': self.permitir_subcadastrador,
            'ativa': self.ativa
        }
