import logging
import os
from pathlib import Path
from logging.handlers import RotatingFileHandler
from datetime import datetime

# Створюємо папку для логів
BASE_DIR = Path(__file__).resolve().parent.parent.parent
LOGS_DIR = BASE_DIR / "logs"
LOGS_DIR.mkdir(parents=True, exist_ok=True)

# Налаштування логера для продуктів
product_logger = logging.getLogger("product_operations")
product_logger.setLevel(logging.INFO)

# Якщо у логера вже є хендлери, не додаємо нові
if not product_logger.handlers:
    # Файл для логів з ротацією (максимум 10 MB, зберігаємо 5 файлів)
    log_file = LOGS_DIR / "product_operations.log"
    file_handler = RotatingFileHandler(
        log_file,
        maxBytes=10 * 1024 * 1024,  # 10 MB
        backupCount=5,
        encoding='utf-8'
    )
    file_handler.setLevel(logging.INFO)

    # Формат логів
    formatter = logging.Formatter(
        '%(asctime)s | %(levelname)s | %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    file_handler.setFormatter(formatter)

    product_logger.addHandler(file_handler)

def log_product_create(product_id: int, data: dict, image_filename: str = None, user_id: int = None):
    """Логування створення продукту"""
    log_data = {
        "action": "CREATE",
        "product_id": product_id,
        "name": data.get("name"),
        "price": data.get("price"),
        "price_old": data.get("price_old"),
        "model": data.get("model"),
        "manufacturer_id": data.get("manufacturer_id"),
        "has_image": image_filename is not None,
        "image_filename": image_filename,
        "user_id": user_id
    }
    product_logger.info(f"Product created: {log_data}")

def log_product_update(product_id: int, data: dict, image_filename: str = None, user_id: int = None):
    """Логування оновлення продукту"""
    # Фільтруємо тільки ті поля, які були передані (не None)
    updated_fields = {k: v for k, v in data.items() if v is not None}

    log_data = {
        "action": "UPDATE",
        "product_id": product_id,
        "updated_fields": updated_fields,
        "has_new_image": image_filename is not None,
        "image_filename": image_filename,
        "user_id": user_id
    }
    product_logger.info(f"Product updated: {log_data}")

def log_product_delete(product_id: int, user_id: int = None):
    """Логування видалення продукту"""
    log_data = {
        "action": "DELETE",
        "product_id": product_id,
        "user_id": user_id
    }
    product_logger.info(f"Product deleted: {log_data}")