from pydantic import BaseModel
from typing import Optional, Dict, Any
from datetime import datetime

class TokenData(BaseModel):
    sub: Optional[str] = None
    email: Optional[str] = None
    username: Optional[str] = None
    exp: Optional[datetime] = None
    type: Optional[str] = None

class TokenPayload(BaseModel):
    sub: str
    email: str
    username: str
    exp: int
    iat: int
    type: str

class TokenValidationResponse(BaseModel):
    valid: bool
    user_id: Optional[str] = None
    email: Optional[str] = None
    username: Optional[str] = None
    error: Optional[str] = None

class SessionInfo(BaseModel):
    session_id: str
    user_id: str
    created_at: datetime
    last_accessed: datetime
    expires_at: datetime
    device_info: Optional[Dict[str, Any]] = None
    ip_address: Optional[str] = None
    user_agent: Optional[str] = None
    is_current: bool = False

class UserSessions(BaseModel):
    sessions: list[SessionInfo]
    total_count: int
