from typing import Optional, Dict, Any from pydantic import BaseModel from datetime import datetime from uuid import UUID class EnvironmentCreate(BaseModel): slug: str frontend_base_url: str backend_base_url: str sso_entry_path: str = "/sso/callback" permission_sync_endpoint: str = "/internal/permissions" sso_exchange_endpoint: Optional[str] = "/internal/sso/exchange" provisioning_endpoint: str = "/internal/tenants/provision" trust_type: str = "hmac" trust_credentials: Dict[str, Any] is_default: bool = False is_active: bool = True class EnvironmentUpdate(BaseModel): slug: Optional[str] = None frontend_base_url: Optional[str] = None backend_base_url: Optional[str] = None sso_entry_path: Optional[str] = None permission_sync_endpoint: Optional[str] = None sso_exchange_endpoint: Optional[str] = None provisioning_endpoint: Optional[str] = None trust_type: Optional[str] = None trust_credentials: Optional[Dict[str, Any]] = None is_default: Optional[bool] = None is_active: Optional[bool] = None class EnvironmentResponse(BaseModel): id: UUID module_id: UUID slug: str frontend_base_url: str backend_base_url: str sso_entry_path: Optional[str] = "/sso/callback" permission_sync_endpoint: Optional[str] = "/internal/permissions" sso_exchange_endpoint: Optional[str] provisioning_endpoint: Optional[str] = "/internal/tenants/provision" trust_type: str is_default: bool is_active: bool created_at: datetime updated_at: Optional[datetime] class Config: from_attributes = True