#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import csv
from collections import defaultdict
inv = lambda x: float(x) if (x or "").strip() else 0.0
rows = list(csv.DictReader(open("general.csv", encoding="utf-8-sig")))
TRE = {"Mercado Pago","Efectivo de la mueblería","Cuenta DNI","Banco Macro","Banco Nación","Cocos"}

print("== Prefijos por diario de PLATA (prefijo = antes del primer '/' o espacio) ==")
byj = defaultdict(lambda: defaultdict(lambda: [0,0.0]))
for r in rows:
    if r["Diario"] not in TRE: continue
    num = r["Número"].strip()
    pref = num.split("/")[0].split(" ")[0]
    c = byj[r["Diario"]][pref]
    c[0]+=1; c[1]+=abs(inv(r["Total firmado"]))
for j in sorted(byj):
    print(f"\n{j}:")
    for p in sorted(byj[j], key=lambda x:-byj[j][x][1]):
        n,s = byj[j][p]
        print(f"   {p:<8} {n:>4} mov   ${s:>12,.0f}")

# Foco Mercado Pago: PMP vs MP
print("\n== Mercado Pago: cruce PMP vs MP (mismo monto+fecha) ==")
mp = [r for r in rows if r["Diario"]=="Mercado Pago"]
pmp = [r for r in mp if r["Número"].startswith("PMP")]
mpp = [r for r in mp if r["Número"].startswith("MP/")]
print(f"PMP={len(pmp)} (${sum(abs(inv(r['Total firmado'])) for r in pmp):,.0f})  |  MP={len(mpp)} (${sum(abs(inv(r['Total firmado'])) for r in mpp):,.0f})")
twins=0; usados=set()
for p in pmp:
    for i,m in enumerate(mpp):
        if i in usados: continue
        if p["Fecha"]==m["Fecha"] and abs(abs(inv(p["Total firmado"]))-abs(inv(m["Total firmado"])))<1:
            twins+=1; usados.add(i); break
print(f"PMP con gemelo MP exacto (mismo dia+monto): {twins}/{len(pmp)}")
