import os
import random
import uuid
from datetime import datetime, timedelta
from app import create_app
from app.models import db, Usuario, Campanha, Pessoa, MetaCadastrador, BairroZona, Politico, CampanhaPolitico

app = create_app()

FIRST_NAMES = [
    'Gabriel', 'Lucas', 'Matheus', 'Pedro', 'Guilherme', 'Gustavo', 'Felipe', 'Rafael', 'João', 'Enzo',
    'Arthur', 'Bernardo', 'Heitor', 'Davi', 'Lorenzo', 'Thales', 'Raiam', 'Samuel', 'Diego', 'Bruno',
    'Ana', 'Julia', 'Beatriz', 'Larissa', 'Mariana', 'Camila', 'Amanda', 'Bruna', 'Letícia', 'Isabela',
    'Sophia', 'Alice', 'Helena', 'Laura', 'Manuela', 'Valentina', 'Giovanna', 'Fernanda', 'Patrícia', 'Vanessa'
]

LAST_NAMES = [
    'Silva', 'Santos', 'Oliveira', 'Souza', 'Rodrigues', 'Ferreira', 'Alves', 'Pereira', 'Lima', 'Gomes',
    'Costa', 'Ribeiro', 'Martins', 'Carvalho', 'Almeida', 'Lopes', 'Soares', 'Fernandes', 'Vieira', 'Barbosa',
    'Rocha', 'Dias', 'Nascimento', 'Andrade', 'Moreira', 'Nunes', 'Marques', 'Machado', 'Mendes', 'Freitas'
]

BAIRROS_MANAUS_GEO = [
    ('Cidade Nova', 'Zona Norte', -3.0305, -59.9708, '69090-000'),
    ('Jorge Teixeira', 'Zona Leste', -3.0512, -59.9241, '69088-000'),
    ('Compensa', 'Zona Oeste', -3.1091, -60.0543, '69035-000'),
    ('Alvorada', 'Centro-Oeste', -3.0850, -60.0410, '69042-000'),
    ('Centro', 'Zona Sul', -3.1316, -60.0232, '69005-000'),
    ('São José Operário', 'Zona Leste', -3.0811, -59.9532, '69085-000'),
    ('Coroado', 'Zona Leste', -3.0945, -59.9782, '69080-000'),
    ('Parque 10 de Novembro', 'Centro-Sul', -3.0832, -60.0089, '69055-000'),
    ('Flores', 'Centro-Sul', -3.0645, -60.0156, '69058-000'),
    ('Adrianópolis', 'Centro-Sul', -3.1045, -60.0123, '69057-000'),
    ('Aleixo', 'Centro-Sul', -3.0988, -59.9950, '69060-000'),
    ('Japiim', 'Zona Sul', -3.1150, -59.9850, '69077-000'),
    ('Armando Mendes', 'Zona Leste', -3.0889, -59.9388, '69089-000'),
    ('Nova Cidade', 'Zona Norte', -3.0080, -59.9850, '69097-000'),
    ('Novo Aleixo', 'Zona Leste', -3.0480, -59.9550, '69098-000'),
    ('Santa Etelvina', 'Zona Norte', -2.9910, -59.9950, '69059-000'),
    ('Tarumã', 'Zona Oeste', -3.0350, -60.0850, '69041-000'),
    ('Dom Pedro', 'Centro-Oeste', -3.0920, -60.0380, '69040-000'),
    ('Glória', 'Zona Oeste', -3.1250, -60.0390, '69011-000'),
    ('Educandos', 'Zona Sul', -3.1410, -60.0110, '69070-000')
]

RUAS = [
    'Rua das Palmeiras', 'Avenida Brasil', 'Rua São João', 'Avenida das Torres', 'Rua 7 de Setembro',
    'Alameda Cosme Ferreira', 'Rua Visconde de Porto Alegre', 'Avenida Djalma Batista', 'Rua Recife',
    'Rua Major Gabriel', 'Avenida Constantino Nery', 'Rua Emílio Moreira', 'Avenida Efigênio Salles'
]

def seed_10000():
    with app.app_context():
        print("[Seed] Reiniciando banco de dados...")
        db.drop_all()
        db.create_all()

        print("[Seed] Populando Tabela Territorial Bairro x Zona...")
        for b, z, lat, lng, cep in BAIRROS_MANAUS_GEO:
            db.session.add(BairroZona(bairro=b, zona=z, lat=lat, lng=lng))
        db.session.commit()

        print("[Seed] Criando Campanha Principal 'Projeto Manaus 2026'...")
        campanha = Campanha(
            nome="Projeto Manaus 2026",
            politico_principal="Marcos Silva",
            cargo="Deputado Estadual",
            municipio="Manaus",
            estado="AM",
            partido="PMD",
            coligacao="União pelo Amazonas",
            meta_total=10000,
            meta_por_cadastrador=50,
            slogan="Presença e União pelo Amazonas",
            data_inicio=datetime.utcnow().date(),
            ativa=True
        )
        db.session.add(campanha)
        db.session.flush()

        pol_principal = Politico(nome="Marcos Silva", cargo="Deputado Estadual", partido="PMD")
        pol_aliado = Politico(nome="Roberto Santos", cargo="Vereador", partido="PMD")
        db.session.add_all([pol_principal, pol_aliado])
        db.session.flush()

        db.session.add(CampanhaPolitico(campanha_id=campanha.id, politico_id=pol_principal.id, relacao=CampanhaPolitico.REL_PRINCIPAL))
        db.session.add(CampanhaPolitico(campanha_id=campanha.id, politico_id=pol_aliado.id, relacao=CampanhaPolitico.REL_ALIADO))

        print("[Seed] Criando Perfis de Acesso para os 4 perfis do sistema...")
        dev = Usuario(nome="Desenvolvedor Superadmin", email="dev@unity.com", perfil=Usuario.ROLE_DEV, campanha_id=campanha.id, primeiro_acesso=False)
        dev.set_senha("dev123")

        admin = Usuario(nome="Carlos Administrador", email="admin@manaus2026.com", perfil=Usuario.ROLE_ADMIN, campanha_id=campanha.id, primeiro_acesso=False)
        admin.set_senha("admin123")

        vis = Usuario(nome="Roberto Visualizador", email="visualizador@manaus2026.com", perfil=Usuario.ROLE_VISUALIZADOR, campanha_id=campanha.id, primeiro_acesso=False)
        vis.set_senha("vis123")

        multi = Usuario(nome="João Multiplicador", email="multiplicador@manaus2026.com", perfil=Usuario.ROLE_MULTIPLICADOR, campanha_id=campanha.id, primeiro_acesso=False)
        multi.set_senha("123456")

        db.session.add_all([dev, admin, vis, multi])
        db.session.flush()

        db.session.add(MetaCadastrador(cadastrador_id=multi.id, campanha_id=campanha.id, meta=50, quantidade_atual=0))
        db.session.commit()

        print("[Seed] SUCCESS: Seeding limpo concluído com sucesso!")

if __name__ == '__main__':
    seed_10000()

if __name__ == '__main__':
    seed_10000()
