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 # Assuming UserPublic is defined here

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 # User who recorded this activity
    created_at: datetime
    updated_at: datetime
    
    payer: Optional[UserPublic] = None # User who made this part of the payment
    creator: Optional[UserPublic] = None # User who recorded this activity

    model_config = ConfigDict(from_attributes=True)

# Schema for updating a settlement activity (if needed in the future)
# class SettlementActivityUpdate(BaseModel):
#     amount_paid: Optional[Decimal] = None
#     paid_at: Optional[datetime] = None

#     @field_validator('amount_paid')
#     @classmethod
#     def amount_must_be_positive_if_provided(cls, v: Optional[Decimal]) -> Optional[Decimal]:
#         if v is not None and v <= Decimal("0"):
#             raise ValueError("Amount paid must be a positive value.")
#         return v