from enum import Enum

from pydantic import BaseModel, ValidationInfo, field_validator


class TracingProviderEnum(Enum):
    LANGFUSE = 'langfuse'
    LANGSMITH = 'langsmith'


class BaseTracingConfig(BaseModel):
    """
    Base model class for tracing
    """
    ...


class LangfuseConfig(BaseTracingConfig):
    """
    Model class for Langfuse tracing config.
    """
    public_key: str
    secret_key: str
    host: str = 'https://api.langfuse.com'

    @field_validator("host")
    def set_value(cls, v, info: ValidationInfo):
        if v is None or v == "":
            v = 'https://api.langfuse.com'
        if not v.startswith('https://') and not v.startswith('http://'):
            raise ValueError('host must start with https:// or http://')

        return v


class LangSmithConfig(BaseTracingConfig):
    """
    Model class for Langsmith tracing config.
    """
    api_key: str
    project: str
    endpoint: str = 'https://api.smith.langchain.com'

    @field_validator("endpoint")
    def set_value(cls, v, info: ValidationInfo):
        if v is None or v == "":
            v = 'https://api.smith.langchain.com'
        if not v.startswith('https://'):
            raise ValueError('endpoint must start with https://')

        return v