from typing import List

from sqlalchemy.orm import Session

from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceStatus
from api.v1.modules.a76.items.models import LineItem
from core.exceptions import ErrorCollector


def pre_validators(
    db: Session,
    invoice: InvoiceHeader,
    tenant_id: str,
    company_id: str,
    errors: ErrorCollector,
) -> List[LineItem]:
    """
    Validaciones previas a la reversión de una factura de importación temporal.

    - Verifica que la factura esté en estatus PROCESSED.
    - Carga y retorna las partidas asociadas a la factura.
    """
    if invoice.status != InvoiceStatus.PROCESSED:
        errors.add_error(
            "status",
            "La factura no fue procesada y no puede ser revertida",
            solution=["Verifique el estatus de la factura antes de intentar deshacer el proceso"],
            code="NOT_PROCESSED",
            value=invoice.status,
        )

    lines: List[LineItem] = (
        db.query(LineItem)
        .filter(
            LineItem.invoice_id == invoice.id,
            LineItem.tenant_id == tenant_id,
            LineItem.company_id == company_id,
        )
        .all()
    )

    return lines
