# -*- coding: utf-8 -*-
"""
Сервис для работы с витринами.
"""
from inventory.models import Showcase, Warehouse
from inventory.services.warehouse_service import WarehouseService


class ShowcaseService:
    """Сервис управления витринами"""

    # Константы для витрины по умолчанию
    DEFAULT_NAME = 'Основная витрина'
    DEFAULT_DESCRIPTION = 'Витрина по умолчанию, созданная автоматически при регистрации'

    @classmethod
    def get_default(cls) -> Showcase | None:
        """
        Получить витрину по умолчанию.

        Returns:
            Showcase или None если не найдена
        """
        return Showcase.objects.filter(is_default=True, is_active=True).first()

    @classmethod
    def get_or_create_default(cls, warehouse: Warehouse = None) -> tuple[Showcase, bool]:
        """
        Получить или создать витрину по умолчанию.

        Args:
            warehouse: Склад для витрины. Если не указан, используется склад по умолчанию.

        Returns:
            tuple (Showcase, created: bool)

        Raises:
            ValueError: если склад не найден и не может быть создан
        """
        if warehouse is None:
            warehouse, _ = WarehouseService.get_or_create_default()

        return Showcase.objects.get_or_create(
            warehouse=warehouse,
            is_default=True,
            defaults={
                'name': cls.DEFAULT_NAME,
                'description': cls.DEFAULT_DESCRIPTION,
                'is_active': True,
            }
        )

    @classmethod
    def reset_default(cls, warehouse: Warehouse = None) -> Showcase:
        """
        Удалить и пересоздать витрину по умолчанию.
        Используется при --reset в init_tenant_data.

        Args:
            warehouse: Склад для витрины

        Returns:
            Новый Showcase
        """
        if warehouse is None:
            warehouse, _ = WarehouseService.get_or_create_default()

        Showcase.objects.filter(warehouse=warehouse, is_default=True).delete()
        showcase, _ = cls.get_or_create_default(warehouse)
        return showcase
