"""Pydantic schemas for Checkout Settings."""
from typing import Optional, List
from pydantic import BaseModel, field_validator


class CheckoutSettingsResponse(BaseModel):
    default_tip_enabled: bool = False
    default_tip_percentages: Optional[List[int]] = None
    default_tip_allow_custom: bool = False
    default_thank_you_message: Optional[str] = None
    default_redirect_url: Optional[str] = None
    default_require_payer_verification: bool = False
    default_payer_verification_type: Optional[str] = None

    class Config:
        from_attributes = True


class CheckoutSettingsUpdate(BaseModel):
    default_tip_enabled: Optional[bool] = None
    default_tip_percentages: Optional[List[int]] = None
    default_tip_allow_custom: Optional[bool] = None
    default_thank_you_message: Optional[str] = None
    default_redirect_url: Optional[str] = None
    default_require_payer_verification: Optional[bool] = None
    default_payer_verification_type: Optional[str] = None

    @field_validator("default_redirect_url")
    @classmethod
    def validate_redirect_url(cls, v: Optional[str]) -> Optional[str]:
        if v is None:
            return v
        from urllib.parse import urlparse
        parsed = urlparse(v)
        if parsed.scheme not in ("http", "https") or not parsed.netloc:
            raise ValueError("Must be a valid http or https URL")
        return v
