"""Consolidação mensal a partir de uma lista de lançamentos."""
from collections import defaultdict
from typing import List, Optional
from ..domain.models import Lancamento, ResumoMensal, Escopo


def consolidar_mensal(lancamentos: List[Lancamento], escopo: Optional[Escopo] = None) -> List[ResumoMensal]:
    agg: dict[str, ResumoMensal] = defaultdict(lambda: ResumoMensal(mes=""))
    for l in lancamentos:
        if escopo and l.escopo != escopo:
            continue
        mes = l.data[:7]
        r = agg[mes]
        r.mes = mes
        if l.tipo == "entrada":
            r.entradas += l.valor
        else:
            r.saidas += l.valor
    return [agg[m] for m in sorted(agg.keys())]
