from datetime import datetime, timezone

from sqlalchemy.orm import Session, joinedload

from app.models.audit_log import AuditLog


class AuditRepository:
    def __init__(self, db: Session):
        self.db = db

    def create_entries(self, entries: list[dict]) -> None:
        for entry in entries:
            self.db.add(AuditLog(**entry))

    def list_for_entity(
        self,
        agency_id: int,
        entity_type: str,
        entity_id: int,
        *,
        limit: int = 50,
        offset: int = 0,
    ) -> tuple[list[AuditLog], int]:
        query = (
            self.db.query(AuditLog)
            .options(joinedload(AuditLog.user))
            .filter(
                AuditLog.agency_id == agency_id,
                AuditLog.entity_type == entity_type,
                AuditLog.entity_id == entity_id,
            )
        )
        total = query.count()
        items = query.order_by(AuditLog.created_at.desc()).offset(offset).limit(limit).all()
        return items, total
