from typing import Any, Optional
from sqlmodel import SQLModel, Field
from datetime import datetime
from sqlalchemy import Column, JSON

class Resume(SQLModel, table=True):
    __tablename__ = "resumes"
    id: Optional[int] = Field(default=None, primary_key=True)
    filename: str
    name: Optional[str] = None
    email: Optional[str] = None
    phone: Optional[str] = None
    location: Optional[str] = None
    linkedin_url: Optional[str] = None
    github_url: Optional[str] = None
    
    # Using JSON type to match your existing PostgreSQL schema
    summary: Optional[Any] = Field(default=None, sa_column=Column(JSON))
    experience: Optional[Any] = Field(default=None, sa_column=Column(JSON))
    projects: Optional[Any] = Field(default=None, sa_column=Column(JSON))

    education: Optional[Any] = Field(default=None, sa_column=Column(JSON))
    skills: Optional[Any] = Field(default=None, sa_column=Column(JSON))
    certifications: Optional[Any] = Field(default=None, sa_column=Column(JSON))
    languages: Optional[Any] = Field(default=None, sa_column=Column(JSON))
    raw_data: Optional[Any] = Field(default=None, sa_column=Column(JSON))
    others: Optional[Any] = Field(default=None, sa_column=Column(JSON))

    file_path: Optional[str] = None
    created_at: datetime = Field(default_factory=datetime.utcnow)
    updated_at: datetime = Field(default_factory=datetime.utcnow, sa_column_kwargs={"onupdate": datetime.utcnow})

class User(SQLModel, table=True):
    __tablename__ = "users"
    id: Optional[int] = Field(default=None, primary_key=True)
    username: str = Field(unique=True, index=True)
    email: str = Field(unique=True, index=True)
    full_name: Optional[str] = None
    phone: Optional[str] = None
    profile_photo: Optional[str] = None
    hashed_password: str
    is_active: bool = Field(default=True)
    is_admin: bool = Field(default=False)
    created_at: datetime = Field(default_factory=datetime.utcnow)
