"""
Configuração do monitor de novos CNPJs - CNAE Alimentação / MG.
"""
import os
from dotenv import load_dotenv

load_dotenv()

# --- Alvo do monitoramento ---
# Valor padrão — sobrescrito em runtime por load_ufs_alvo() que lê portal_config
UF_ALVO = "MG"


def load_ufs_alvo() -> list[str]:
    """Lê a lista de UFs monitoradas do portal_config (tabela no Postgres).
    Retorna [UF_ALVO] se a tabela não existir ou o registro estiver vazio."""
    try:
        import psycopg2  # importação tardia para não quebrar se psycopg2 não estiver disponível
        con = psycopg2.connect(POSTGRES_DSN)
        cur = con.cursor()
        cur.execute("SELECT value FROM portal_config WHERE key = 'ufs_monitoradas'")
        row = cur.fetchone()
        cur.close()
        con.close()
        if row and row[0]:
            ufs = [u.strip() for u in row[0].split(',') if u.strip()]
            if ufs:
                return ufs
    except Exception:
        pass
    return [UF_ALVO]

# CNAEs de alimentação (código sem pontuação, como aparece no CSV da RFB).
# Ajuste essa lista conforme o escopo desejado.
CNAES_ALIMENTACAO = [
    "5611201",  # Restaurantes e similares
    "5611203",  # Lanchonetes, casas de chá, sucos e similares
    "5611204",  # Bares e outros estabelecimentos com música ao vivo
    "5611205",  # Bares e outros estabelecimentos sem música ao vivo
    "5612100",  # Serviços ambulantes de alimentação
    "5620101",  # Fornecimento de alimentos preparados (catering)
    "5620102",  # Serviços de alimentação para eventos e recepções (buffet)
    "5620104",  # Fornecimento de alimentos preparados sob encomenda (marmitas)
    "4721102",  # Padaria com produção própria - comércio varejista
    "1091102",  # Fabricação de produtos de padaria e confeitaria (varejo)
]

# Situação cadastral: 02 = ATIVA (código oficial da RFB)
SITUACAO_ATIVA = "02"

# --- Sócios e Administradores (QSA) ---
# Códigos de qualificação de sócio que indicam função de administração —
# usados para decidir quem é cadastrado automaticamente como contato
# "Administrador/Representante legal" no CRM. Conferir a tabela oficial de
# qualificações de sócios da RFB (arquivo "Qualificacoes.zip" dos Dados
# Abertos) para o código completo; os abaixo cobrem os casos mais comuns.
QUALIFICACOES_ADMINISTRADOR = {
    "05",  # Administrador
    "10",  # Diretor
    "16",  # Presidente
    "17",  # Procurador
    "20",  # Sócio-Administrador
    "22",  # Sócio
    "23",  # Sócio-Gerente
    "49",  # Sócio-Administrador (pessoa física residente no exterior)
    "65",  # Titular pessoa física residente ou domiciliado no Brasil
}

# Tabela oficial de qualificações RFB (Qualificacoes.zip — Dados Abertos CNPJ).
# Chave: código como string com zero à esquerda (ex: "05").
QUALIFICACOES_MAP: dict[str, str] = {
    "05": "Administrador",
    "08": "Conselheiro de Administração",
    "10": "Diretor",
    "11": "Interveniente",
    "12": "Inventariante",
    "13": "Liquidante",
    "15": "Ministro de Estado",
    "16": "Presidente",
    "17": "Procurador",
    "18": "Secretário",
    "19": "Síndico (Condomínio)",
    "20": "Sócio-Administrador",
    "21": "Associado",
    "22": "Sócio",
    "23": "Sócio-Gerente",
    "24": "Sócio-Comissionado",
    "25": "Sócio do Conselho",
    "26": "Sócio-Direto",
    "27": "Sócio-Ostensivo",
    "28": "Sócio-Solidário",
    "29": "Sócio (Sigiloso)",
    "30": "Liquidante",
    "31": "Titular",
    "33": "Cônjuge ou Companheiro de Sócio",
    "37": "Sócio Ostensivo",
    "38": "Sócio Participante",
    "40": "Sócio Incapaz ou Relativamente Incapaz",
    "41": "Sócio (Representante de Menor)",
    "49": "Sócio-Administrador (residente no exterior)",
    "52": "Membro do Conselho Fiscal",
    "53": "Cotas em Tesouraria",
    "54": "Fundador",
    "55": "Membro Nato",
    "56": "Conselheiro Fiscal com Função de Presidente",
    "57": "Conselheiro Fiscal com Função de Suplente",
    "63": "Responsável",
    "65": "Titular (PF residente no Brasil)",
    "66": "Titular (PF residente no exterior)",
    "67": "Titular (PJ domiciliada no Brasil)",
    "68": "Titular (PJ domiciliada no exterior)",
    "70": "Membro",
    "78": "Titular (PJ)",
    "80": "Sócio-Investidor",
}

# --- Fonte primária: WebDAV SERPRO+/Receita Federal ---
# Repositório oficial publicado em jan/2026 em substituição ao dadosabertos.rfb.gov.br.
# Pastas organizadas por AAAA-MM; autenticação via token público (sem senha).
RFB_WEBDAV_URL   = "https://arquivos.receitafederal.gov.br/public.php/webdav"
RFB_WEBDAV_TOKEN = "YggdBLfdninEJX9"

# --- Fallback: mirror Casa dos Dados ---
# Replica os mesmos arquivos com pastas no formato AAAA-MM-DD.
# Usado automaticamente se o WebDAV da RFB estiver indisponível.
RFB_BASE_URL = "https://dados-abertos-rf-cnpj.casadosdados.com.br/arquivos"

# Arquivos particionados em 10 partes cada (0 a 9)
N_PARTES = 10

# --- Banco de dados (histórico e diff) ---
# Lido de variável de ambiente - configure em um arquivo .env local (ver .env.example)
# NUNCA commitar credenciais reais no repositório.
POSTGRES_DSN = os.getenv(
    "POSTGRES_DSN",
    "postgresql://usuario:senha@localhost:5432/cnpj_monitor",
)
