import glob
from collections import defaultdict
SEC={'A':'Agropecuaria','B':'Ind. extrativas','C':'Ind. de transformacao','D':'Eletricidade e gas',
'E':'Agua, esgoto e residuos','F':'Construcao','G':'Comercio','H':'Transporte e armazenagem',
'I':'Alojamento e alimentacao','J':'Informacao e comunicacao','K':'Financeiro/seguros',
'L':'Imobiliarias','M':'Prof., cientificas e tecnicas','N':'Atividades administrativas',
'O':'Administracao publica','P':'Educacao','Q':'Saude e serv. sociais','R':'Artes, cultura e esporte',
'S':'Outros servicos','T':'Servicos domesticos','U':'Organismos internacionais'}
C_COMP,C_SEC,C_SALDO,C_SUB,C_CBO,C_SEXO,C_SAL=0,4,6,5,7,13,20
rows=[]
def load(pat,kind):
    for f in sorted(glob.glob(pat)):
        with open(f,encoding='utf-8',errors='replace') as fh:
            fh.readline()
            for line in fh:
                p=line.rstrip('\n').split(';')
                if len(p)>20 and p[C_COMP].startswith('2026'):
                    rows.append((kind,p[C_SEC],p[C_CBO],int(p[C_SALDO]),p[C_SEXO],p[C_SAL],p[C_SUB]))
load('oeiras_CAGEDMOV*.csv','MOV');load('oeiras_CAGEDFOR*.csv','FOR');load('oeiras_CAGEDEXC*.csv','EXC')

def sg(k): return -1 if k=='EXC' else 1
NOME={'1':'HOMENS','3':'MULHERES'}

for sexo in ('1','3'):
    d=defaultdict(lambda:[0,0])
    for k,sec,cbo,s,sx,sal,sub in rows:
        if sx!=sexo: continue
        d[sec][0 if s==1 else 1]+=sg(k)
    tot_a=sum(v[0] for v in d.values()); tot_d=sum(v[1] for v in d.values())
    print(f"\n===== {NOME[sexo]} — saldo total {tot_a-tot_d:+d} (adm {tot_a}, desl {tot_d}) =====")
    print(f"{'Setor':<30}{'Adm':>5}{'Desl':>6}{'Saldo':>7}")
    for sec,v in sorted(d.items(), key=lambda x:-(x[1][0]-x[1][1]))[:8]:
        print(f"{SEC.get(sec,sec):<30}{v[0]:5d}{v[1]:6d}{v[0]-v[1]:+7d}")

print("\n\n===== TOP OCUPACOES (CBO) POR SALDO =====")
for sexo in ('1','3'):
    d=defaultdict(int); adm=defaultdict(int)
    for k,sec,cbo,s,sx,sal,sub in rows:
        if sx!=sexo: continue
        d[cbo]+=sg(k)*s
        if s==1: adm[cbo]+=sg(k)
    print(f"\n-- {NOME[sexo]} --")
    for cbo,v in sorted(d.items(), key=lambda x:-x[1])[:10]:
        print(f"  CBO {cbo}  saldo {v:+3d}  (admissoes {adm[cbo]})")
