# services/recipes/app/core/config.py
"""
Configuration management for Recipe Service
"""

import os
from typing import Optional
from shared.config.base import BaseServiceSettings


class Settings(BaseServiceSettings):
    """Recipe service configuration extending base configuration"""

    # Override service-specific settings
    SERVICE_NAME: str = "recipes-service"
    VERSION: str = "1.0.0"
    APP_NAME: str = "Recipe Service"
    DESCRIPTION: str = "Recipe management and planning service"

    # API Configuration
    API_V1_STR: str = "/api/v1"

    # Database configuration (secure approach - build from components)
    @property
    def DATABASE_URL(self) -> str:
        """Build database URL from secure components"""
        # Try complete URL first (for backward compatibility)
        complete_url = os.getenv("RECIPES_DATABASE_URL")
        if complete_url:
            return complete_url

        # Build from components (secure approach)
        user = os.getenv("RECIPES_DB_USER", "recipes_user")
        password = os.getenv("RECIPES_DB_PASSWORD", "recipes_pass123")
        host = os.getenv("RECIPES_DB_HOST", "localhost")
        port = os.getenv("RECIPES_DB_PORT", "5432")
        name = os.getenv("RECIPES_DB_NAME", "recipes_db")

        return f"postgresql+asyncpg://{user}:{password}@{host}:{port}/{name}"

    # Redis configuration - use a specific database number
    REDIS_DB: int = 2

    # Recipe-specific settings
    MAX_RECIPE_INGREDIENTS: int = int(os.getenv("MAX_RECIPE_INGREDIENTS", "50"))
    MAX_BATCH_SIZE_MULTIPLIER: float = float(os.getenv("MAX_BATCH_SIZE_MULTIPLIER", "10.0"))
    DEFAULT_RECIPE_VERSION: str = "1.0"

    # Production settings (integration with production service)
    MAX_PRODUCTION_BATCHES_PER_DAY: int = int(os.getenv("MAX_PRODUCTION_BATCHES_PER_DAY", "100"))
    PRODUCTION_SCHEDULE_DAYS_AHEAD: int = int(os.getenv("PRODUCTION_SCHEDULE_DAYS_AHEAD", "7"))

    # Cost calculation settings
    OVERHEAD_PERCENTAGE: float = float(os.getenv("OVERHEAD_PERCENTAGE", "15.0"))  # Default 15% overhead
    LABOR_COST_PER_HOUR: float = float(os.getenv("LABOR_COST_PER_HOUR", "25.0"))  # Default €25/hour

    # Quality control
    MIN_QUALITY_SCORE: float = float(os.getenv("MIN_QUALITY_SCORE", "6.0"))  # Minimum acceptable quality score
    MAX_DEFECT_RATE: float = float(os.getenv("MAX_DEFECT_RATE", "5.0"))  # Maximum 5% defect rate

    # External service URLs (specific to recipes service)
    PRODUCTION_SERVICE_URL: str = os.getenv(
        "PRODUCTION_SERVICE_URL",
        "http://production-service:8000"
    )
    INVENTORY_SERVICE_URL: str = os.getenv(
        "INVENTORY_SERVICE_URL",
        "http://inventory-service:8000"
    )
    SALES_SERVICE_URL: str = os.getenv(
        "SALES_SERVICE_URL",
        "http://sales-service:8000"
    )


# Global settings instance
settings = Settings()