import pandas as pd
import json
import sys
import os

ARQUIVO_FONTE = r'D:\Users\Claudio\OneDrive\Bd_dre\dre.xlsx'
ARQUIVO_HTML  = r'D:\Evolução categorias\sistema_dfe.html'

print("=" * 55)
print("  ATUALIZADOR DO SISTEMA DFE")
print("=" * 55)
print(f"\n  Fonte : {ARQUIVO_FONTE}")
print(f"  Sistema: {ARQUIVO_HTML}")
print()

# Verificar arquivo fonte
if not os.path.exists(ARQUIVO_FONTE):
    print("  ERRO: Arquivo fonte nao encontrado!")
    print(f"  Caminho: {ARQUIVO_FONTE}")
    input("\n  Pressione ENTER para sair...")
    sys.exit(1)

print("  [1/4] Lendo banco de dados Excel...")
import shutil, tempfile
tmp = tempfile.mktemp(suffix='.xlsx')
shutil.copy2(ARQUIVO_FONTE, tmp)

df = pd.read_excel(tmp, sheet_name='Planilha1')
date_cols = [c for c in df.columns if hasattr(c, 'year') and 2021 <= c.year <= 2026]
anos = [2021, 2022, 2023, 2024, 2025, 2026]

def sl(idx):
    return df.iloc[idx][date_cols].apply(pd.to_numeric, errors='coerce').fillna(0)
def sg(conta):
    mask = df['Conta'].astype(str).str.strip().str.upper() == conta.strip().upper()
    return df.loc[mask, date_cols].apply(pd.to_numeric, errors='coerce').fillna(0).sum()
def sc(conta, sub):
    mask = (df['Conta'].astype(str).str.strip().str.upper() == conta.strip().upper()) & \
           (df['SubConta'].astype(str).str.strip().str.upper() == sub.strip().upper())
    return df.loc[mask, date_cols].apply(pd.to_numeric, errors='coerce').fillna(0).sum()
def anual(s):
    return {str(a): round(float(s[[c for c in date_cols if c.year==a]].sum()), 2) for a in anos}
def mensal(s):
    r = {}
    for a in anos:
        cols_a = [c for c in date_cols if c.year == a]
        r[str(a)] = [round(float(s.get(c, 0)), 2) for c in cols_a]
    return r

receita = sl(87); cmv = sl(91); lb = receita - cmv
df_fix  = sg('DESPESAS FIXA - F')
df_trib = sg('DESPESAS FIXAS/TRIBUTARIAS')
df_var  = sg('DESPESAS VARIAVEIS - V')
folha   = sg('VARIAVEIS / FOLHA DE PAGA') + sc('CAIXA', 'PRO LABORE')
financ  = sg('CONTA CORRENTE - F') + sg('Cc / DESPESAS VARIAVEIS')
tot     = df_fix + df_trib + df_var + folha + financ
result  = lb - tot

print("  [2/4] Calculando indicadores...")

data = {
    'receita': anual(receita), 'cmv': anual(cmv), 'lucro_bruto': anual(lb),
    'desp_fixas': anual(df_fix), 'desp_trib': anual(df_trib),
    'desp_var': anual(df_var), 'folha': anual(folha),
    'financ': anual(financ), 'tot_desp': anual(tot), 'resultado': anual(result),
    'mensal_receita': mensal(receita), 'mensal_cmv': mensal(cmv),
    'mensal_resultado': mensal(result),
    'fix_subs': {
        'Plano de Saude':      anual(sc('DESPESAS FIXA - F', 'PLANO DE SAUDE')),
        'Rede Casa Vale Mais': anual(sc('DESPESAS FIXA - F', 'REDE CASA VALE MAIS - MENSALID')),
        'Energia Eletrica':    anual(sc('DESPESAS FIXA - F', 'ENERGIA ELETRICA')),
        'Aluguel':             anual(sc('DESPESAS FIXA - F', 'ALUGUEL')),
        'Securit Master':      anual(sc('DESPESAS FIXA - F', 'SECURIT MASTER')),
        'Telefone':            anual(sc('DESPESAS FIXA - F', 'TELEFONE')),
        'Agua e Esgoto':       anual(sc('DESPESAS FIXA - F', 'AGUA E ESGOTO')),
        'Sistema':             anual(sc('DESPESAS FIXA - F', 'SISTEMA')),
        'Internet':            anual(sc('DESPESAS FIXA - F', 'INTERNET')),
    },
    'trib_subs': {
        'DAS':               anual(sc('DESPESAS FIXAS/TRIBUTARIAS', 'DAS')),
        'ICMS':              anual(sc('DESPESAS FIXAS/TRIBUTARIAS', 'ICMS')),
        'Impostos DARF':     anual(sc('DESPESAS FIXAS/TRIBUTARIAS', 'IMPOSTOS / DARF')),
        'IPVA':              anual(sc('DESPESAS FIXAS/TRIBUTARIAS', 'IPVA')),
        'Taxas Municipais':  anual(sc('DESPESAS FIXAS/TRIBUTARIAS', 'TAXAS MUNICIPAIS')),
        'Sindicato Patronal':anual(sc('DESPESAS FIXAS/TRIBUTARIAS', 'SINDICATO PATRONAL')),
        'Licenciamento':     anual(sc('DESPESAS FIXAS/TRIBUTARIAS', 'LICENCIAMENTO')),
    },
    'var_subs': {
        'Combustivel':        anual(sc('DESPESAS VARIAVEIS - V', 'COMBUSTIVEL')),
        'Manutencao':         anual(sc('DESPESAS VARIAVEIS - V', 'MANUTENCAO')),
        'Publicidade':        anual(sc('DESPESAS VARIAVEIS - V', 'PUBLICIDADE')),
        'Aquisicao':          anual(sc('DESPESAS VARIAVEIS - V', 'AQUISICAO')),
        'Material Escritorio':anual(sc('DESPESAS VARIAVEIS - V', 'MATERIAL DE ESCRITORIO')),
        'Material Limpeza':   anual(sc('DESPESAS VARIAVEIS - V', 'MATERIAL DE LIMPEZA')),
        'Vale Transporte':    anual(sc('DESPESAS VARIAVEIS - V', 'VALE TRANSPORTE')),
        'Cafe Lanches':       anual(sc('DESPESAS VARIAVEIS - V', 'CAFE / LANCHES')),
        'Servicos Mecanicos': anual(sc('DESPESAS VARIAVEIS - V', 'SERVICOS MECANICOS')),
    },
    'folha_subs': {
        'Salarios':           anual(sc('0', 'SALARIOS')),
        'Pro-Labore':         anual(sc('CAIXA', 'PRO LABORE')),
        'FGTS':               anual(sc('VARIAVEIS / FOLHA DE PAGA', 'FGTS')),
        'GPS INSS':           anual(sc('VARIAVEIS / FOLHA DE PAGA', 'GPS')),
        'Ferias':             anual(sc('VARIAVEIS / FOLHA DE PAGA', 'FERIAS')),
        '13 Salario':         anual(sc('VARIAVEIS / FOLHA DE PAGA', '13o SALARIO')),
        'Comissao':           anual(sc('VARIAVEIS / FOLHA DE PAGA', 'COMISSAO')),
        'Honorario Contador': anual(sc('VARIAVEIS / FOLHA DE PAGA', 'HONORARIO CONTADOR')),
        'Vale':               anual(sc('VARIAVEIS / FOLHA DE PAGA', 'VALE')),
    },
    'cmv_subs': {
        'Material Atacado': anual(sc('CUSTOS MERCADORIAS', 'MATERIAL ATACADO')),
        'Cimento':          anual(sc('CUSTOS MERCADORIAS', 'CIMENTO')),
        'Madeiras':         anual(sc('CUSTOS MERCADORIAS', 'MADEIRAS')),
        'Ferro':            anual(sc('CUSTOS MERCADORIAS', 'FERRO')),
        'Tijolos Blocos':   anual(sc('CUSTOS MERCADORIAS', 'TIJOLOS E BLOCOS')),
        'Pisos':            anual(sc('CUSTOS MERCADORIAS', 'PISOS')),
        'Areia':            anual(sc('CUSTOS MERCADORIAS', 'AREIA')),
        'Pedra':            anual(sc('CUSTOS MERCADORIAS', 'PEDRA')),
        'Telhas':           anual(sc('CUSTOS MERCADORIAS', 'TELHAS')),
        'Fios':             anual(sc('CUSTOS MERCADORIAS', 'FIOS')),
        'Cimento Cola':     anual(sc('CUSTOS MERCADORIAS', 'CIMENTO COLA')),
        'Pintura':          anual(sc('CUSTOS MERCADORIAS', 'PINTURA')),
        'Portas Janelas':   anual(sc('CUSTOS MERCADORIAS', 'PORTAS E JANELAS')),
        'Cal Hidratado':    anual(sc('CUSTOS MERCADORIAS', 'CAL HIDRATADO')),
    },
}

print("  [3/4] Atualizando sistema HTML...")

novo_json = 'const DFE_DATA = ' + json.dumps(data, ensure_ascii=False) + ';'

with open(ARQUIVO_HTML, 'r', encoding='utf-8') as f:
    html = f.read()

import re
html_novo = re.sub(r'const DFE_DATA\s*=\s*\{.*?\};', novo_json, html, flags=re.DOTALL)

if 'const DFE_DATA' not in html_novo:
    # Caso não encontre, inserir antes de </script>
    html_novo = html.replace('</script>', novo_json + '\n</script>', 1)

with open(ARQUIVO_HTML, 'w', encoding='utf-8') as f:
    f.write(html_novo)

print("  [4/4] Abrindo sistema no navegador...")
os.startfile(ARQUIVO_HTML)

# Resumo
print()
print("  " + "=" * 51)
print("  DADOS ATUALIZADOS COM SUCESSO!")
print("  " + "=" * 51)
anos_str = [str(a) for a in anos]
print(f"\n  {'Ano':<8} {'Faturamento':>14} {'Resultado':>12} {'Margem':>8}")
print(f"  {'-'*46}")
for a in anos:
    r = data['receita'][str(a)]
    rs = data['resultado'][str(a)]
    mg = (rs/r*100) if r else 0
    print(f"  {a:<8} R${r:>12,.0f} R${rs:>10,.0f} {mg:>7.1f}%")
print()
os.remove(tmp)
input("  Pressione ENTER para fechar...")
