# Curselia. Recurso original. Guarda este archivo como resumen.py junto al CSV.
# Requiere Python 3.11 o posterior; solo biblioteca estandar.
# Ejecuta: python resumen.py
import csv
from pathlib import Path


def calcular_importe(unidades, precio_centimos):
    if unidades < 0 or precio_centimos < 0:
        raise ValueError("No se admiten cantidades negativas")
    return unidades * precio_centimos


def leer_pedidos(ruta):
    pedidos = []
    with ruta.open(encoding="utf-8-sig", newline="") as archivo:
        for fila in csv.DictReader(archivo):
            unidades = int(fila["unidades"])
            precio = int(fila["precio_centimos"])
            importe = int(fila["importe_centimos"])
            if calcular_importe(unidades, precio) != importe:
                raise ValueError("Importe incoherente en pedido " + fila["pedido"])
            pedidos.append({"pedido": fila["pedido"], "region": fila["region"],
                            "unidades": unidades, "importe_centimos": importe})
    return pedidos


def resumir(pedidos):
    regiones = {}
    for pedido in pedidos:
        region = pedido["region"]
        regiones[region] = regiones.get(region, 0) + pedido["importe_centimos"]
    return regiones


def main():
    carpeta = Path(__file__).resolve().parent
    pedidos = leer_pedidos(carpeta / "datos-pedidos-brisa.csv")
    regiones = resumir(pedidos)
    print("Pedidos:", len(pedidos))
    print("Unidades:", sum(p["unidades"] for p in pedidos))
    print(f"Total EUR: {sum(p['importe_centimos'] for p in pedidos) / 100:.2f}")
    destino = carpeta / "resumen-regiones.csv"
    # Modo x: no reemplaza un archivo existente. Cambia el nombre para repetir.
    with destino.open("x", encoding="utf-8", newline="") as archivo:
        escritor = csv.writer(archivo)
        escritor.writerow(["region", "importe_centimos"])
        for region, importe in sorted(regiones.items()):
            escritor.writerow([region, importe])
    print("Resumen creado:", destino.name)


if __name__ == "__main__":
    main()
