from pydantic import BaseModel, ConfigDict, field_validator
from typing import Optional, List
from decimal import Decimal
from datetime import datetime

from app.schemas.user import UserPublic

class SettlementActivityBase(BaseModel):
    expense_split_id: int
    paid_by_user_id: int
    amount_paid: Decimal
    paid_at: Optional[datetime] = None

class SettlementActivityCreate(SettlementActivityBase):
    @field_validator('amount_paid')
    @classmethod
    def amount_must_be_positive(cls, v: Decimal) -> Decimal:
        if v <= Decimal("0"):
            raise ValueError("Amount paid must be a positive value.")
        return v

class SettlementActivityPublic(SettlementActivityBase):
    id: int
    created_by_user_id: int
    created_at: datetime
    updated_at: datetime
    
    payer: Optional[UserPublic] = None
    creator: Optional[UserPublic] = None

    model_config = ConfigDict(from_attributes=True)


