from __future__ import annotations

import logging

import psycopg
from psycopg.rows import dict_row

from app.core.settings import get_settings
from app.modules.invoices.application.invoice_processing_service import InvoiceProcessingService

from .classifier import TruthClassifierMixin
from .queries import TruthQueriesMixin
from .sync_engine import TruthSyncMixin

logger = logging.getLogger("dscons.erp.inventory_truth")


class InvoiceTruthExtractionService(
    TruthClassifierMixin,
    TruthSyncMixin,
    TruthQueriesMixin,
):
    """Enterprise domain service for recognizing invoice items, extracting Ground Truth equipment and inventory."""

    def __init__(self, db_url: str | None = None):
        settings = get_settings()
        self.db_url = db_url or settings.database_url
        self.invoice_service = InvoiceProcessingService()

    def get_connection(self) -> psycopg.Connection:
        """Create clean psycopg3 database connection with dict_row factory."""
        return psycopg.connect(self.db_url, row_factory=dict_row)
