import logging

from sqlalchemy import select
from typing import Optional, List
from models.omie_cliente import OmieCliente
from sqlalchemy.ext.asyncio import AsyncSession

logger = logging.getLogger(__name__)

class OmieClienteCRUD:
    async def list(
        self,
        db: AsyncSession,
        *,
        cnpj: Optional[str] = None,
    ) -> List[OmieCliente]:
        """Lista clientes Omie com filtro opcional por CNPJ"""
        table_name = OmieCliente.__tablename__
        logger.info(f"OmieClienteCRUD.list chamado - Tabela: {table_name} - CNPJ: {cnpj if cnpj else 'Nenhum (todos)'}")
        try:
            logger.debug("Construindo query SELECT...")
            stmt = select(OmieCliente)
            
            if cnpj:
                logger.debug(f"Aplicando filtro por CNPJ: {cnpj}")
                cnpj_limpo = cnpj.replace('.', '').replace('/', '').replace('-', '').strip()
                logger.debug(f"CNPJ limpo: {cnpj_limpo}")
                stmt = stmt.where(OmieCliente.cnpj.like(f"%{cnpj_limpo}%"))
            else:
                logger.debug("Nenhum filtro aplicado - buscando todos os clientes")
            
            logger.info(f"Executando query na tabela {table_name}...")
            result = await db.execute(stmt)
            logger.debug("Query executada com sucesso")
            
            clientes = list(result.scalars().all())
            logger.info(f"Query retornou {len(clientes)} clientes da tabela {table_name}")
            return clientes
            
        except Exception as e:
            error_msg = str(e)
            logger.error(f"Erro em OmieClienteCRUD.list ao consultar {table_name}: {e}", exc_info=True)
            raise

crud = OmieClienteCRUD()

