from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime

class UserBase(BaseModel):
    name: str
    email: str
    handicap: float = 10.0
    bio: Optional[str] = ""
    avatar_url: Optional[str] = None
    location: Optional[str] = "California"

class UserCreate(UserBase):
    pass

class User(UserBase):
    id: int
    member_since: str
    rounds_played: int
    match_rating: float
    verified: bool
    class Config:
        from_attributes = True

class Course(BaseModel):
    id: int
    name: str
    location: str
    description: Optional[str]
    image_url: Optional[str]
    rating: float
    partners_seeking: int
    class Config:
        from_attributes = True

class MatchBase(BaseModel):
    partner_id: int
    course_id: Optional[int] = None
    preferred_date: Optional[str] = None

class MatchCreate(MatchBase):
    pass

class Match(MatchBase):
    id: int
    user_id: int
    status: str
    created_at: datetime
    class Config:
        from_attributes = True

class MessageBase(BaseModel):
    receiver_id: int
    content: str

class MessageCreate(MessageBase):
    pass

class Message(MessageBase):
    id: int
    sender_id: int
    created_at: datetime
    read: bool
    class Config:
        from_attributes = True

class MessageWithUser(Message):
    sender_name: Optional[str] = None

# For WebSocket
class ChatMessage(BaseModel):
    sender_id: int
    receiver_id: int
    content: str
    timestamp: str