import logging
from datetime import datetime
from typing import Optional

from sqlalchemy.orm import Session

from src.apps.match.enums import Separator, Status
from src.apps.wine.wine_log.models.wine_log import MatchedLog

logger = logging.getLogger(__name__)


class LogsService:
    def save_logs(self, code: str, url: str, status: str, attempt: int, message: str, caused_by: str):
        try:
            logger.info(f"Saving crawl log: {code}, status={status}, attempt={attempt}")
            # Save log to DB or file
        except Exception as e:
            logger.error(f"Error saving log: {e}")

    def save_match_log(
        self,
        db: Session,
        code: str,
        crawl_date: datetime,
        process_keyword: bool,
        status: str,
        message: str = "",
        date_start: Optional[datetime] = None,
        total_records: Optional[int] = None,
        history_matched: Optional[int] = None,
        keyword_matched: Optional[int] = None,
        ambiguous_matched: Optional[int] = None,
        unknown_wines: Optional[int] = None,
    ):
        try:
            new_log = MatchedLog(
                code=code,
                process_keyword=process_keyword,
                total_records=total_records or 0,
                history_matched=history_matched or 0,
                keyword_matched=keyword_matched or 0,
                ambiguous_matched=ambiguous_matched or 0,
                unknown_wines=unknown_wines or 0,
                status=status,
                crawl_date=crawl_date,
                date_start=date_start,
                date_end=datetime.now() if status == Status.SUCCESS else None,
                message=message,
            )
            db.add(new_log)
            db.commit()
            logger.info(f"Saving match log for {code} [keyword={process_keyword}]")
            # Save log data to DB or file
        except Exception as e:
            logger.error(f"Error saving match log: {e}")
