from pydantic import BaseModel, Field
from pydantic_settings import BaseSettings
import yaml
from pathlib import Path

class TimeoutConfig(BaseModel):
    length_minutes: int = Field(1, ge=0)
    min_calibrations: int = Field(1, ge=0, le=4)

class Settings(BaseSettings):
    basestation_count: int = Field(3, ge=1, le=4)

    timeout: TimeoutConfig
        
    @classmethod
    def from_yaml(cls, yaml_path="calibot_config.yaml"):
        """Load settings from YAML file"""
        config_path = Path(yaml_path)
        if not config_path.exists():
            raise FileNotFoundError(f"Config file not found: {yaml_path}")
            
        with open(config_path, 'r') as f:
            yaml_data = yaml.safe_load(f)
        
        # Create instance with YAML data and env overrides
        return cls(**yaml_data)