from __future__ import annotations

from typing import Any

from pydantic import BaseModel, Field, field_validator


class CampaignCreateBody(BaseModel):
    name: str = Field(max_length=255)
    description: str | None = Field(None, max_length=1000)
    start_time: str | None = None
    bot_name: str | None = Field(None, max_length=255)
    exeuctive_number: str | None = Field(None, max_length=255)
    run_now: Any = False
    callback_enabled: Any = True
    retry_logic: str | None = ""
    custom_attempt_values: list[Any] | None = None

    @field_validator("retry_logic")
    @classmethod
    def retry_logic_ok(cls, v: str | None) -> str:
        allowed = ("business_logic", "custom_logic", "not_retry", "")
        if v not in allowed:
            raise ValueError("retry_logic must be one of business_logic, custom_logic, not_retry")
        return v or ""


class CampaignUpdateBody(BaseModel):
    name: str | None = Field(None, max_length=255)
    description: str | None = Field(None, max_length=1000)
    start_time: str | None = None
    end_time: str | None = None
