from pydantic import BaseModel, Field
from typing import Optional, List
from datetime import datetime
from bson import ObjectId

class JobseekerCV(BaseModel):
    id: int
    email: str = ""
    email_verify: int = 0
    status: int = 1
    role_id: int = 2
    provider_id: int = 6
    payment_mode: str = ""
    country_id: int = 0
    country_code: int = 0
    mobile_number: str = ""
    subscription_randno: str = ""
    dev_password: str = ""
    set_password: int = 0
    password: str = ""
    intermediate_flag: int = 0
    redirect_preference: int = 0
    welcome_status: int = 0
    feedback_flag: int = 0
    step_level: int = 0
    profile_complete: int = 0
    is_subscribed: int = 0
    registered_date: datetime = Field(default_factory=datetime.utcnow)
    pub_id: int = 0
    is_deleted: int = 0
    geo_country: str = ""
    cvfile_store_path: str = ""  # New field for file path
    geo_city: str = ""
    latitude: str = ""
    longitude: str = ""
    site_version: str = "PRO"
    updated_at: datetime = Field(default_factory=datetime.utcnow)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    last_login_date: str = ""
    cv_filename: str = ""
    cv_raw_text: str = ""

    class Config:
        arbitrary_types_allowed = True


class JobseekerBasicDetails(BaseModel):
    id: int
    jobseeker_id: int
    country_id: int = 0
    full_name: str = ""
    first_name: str = ""
    last_name: str = ""
    profile_type_id: str = ""
    status: int = 1
    is_deleted: int = 0
    profile_completion: int = 35
    updated_at: datetime = Field(default_factory=datetime.utcnow)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    original_file_name: str = ""
    resume_added_date: str = ""
    resume_file: str = ""
    resume_upload: int = 1
    resume_parsing: int = 2
    key_skills: str = ""
    key_skills_custome: List[str] = []
    key_skills_id: List[int] = []
    profile_summary: str = ""
    email: str = ""
    phone: str = ""
    date_of_birth: Optional[str] = None
    nationality: Optional[str] = None
    languages: List[str] = []

    class Config:
        arbitrary_types_allowed = True


class JobseekerEducationDetails(BaseModel):
    id: int
    jobseeker_id: int
    institute_name: str = ""
    completion_year: Optional[int] = None
    highest_education_id: int = 0
    degree_id: int = 0
    specialization_id: int = 0
    status: int = 1
    is_deleted: int = 0
    updated_at: datetime = Field(default_factory=datetime.utcnow)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    degree: str = ""
    field_of_study: str = ""
    start_date: Optional[str] = None
    end_date: Optional[str] = None
    grade: Optional[str] = None

    class Config:
        arbitrary_types_allowed = True


class JobseekerEmploymentDetails(BaseModel):
    id: int
    jobseeker_id: int
    company_name: str = ""
    designation: str = ""
    job_desc: List[str] = []
    from_period: Optional[datetime] = None
    to_period: Optional[datetime] = None
    currently_working: int = 0
    status: int = 1
    is_deleted: int = 0
    updated_at: datetime = Field(default_factory=datetime.utcnow)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    start_date: Optional[str] = None
    end_date: Optional[str] = None
    job_description: Optional[str] = None

    class Config:
        arbitrary_types_allowed = True


class JobseekerCourseDetails(BaseModel):
    id: int
    jobseeker_id: int
    course_name: str = ""
    completion_location: str = ""
    completion_year: int = 0
    institute_name: str = ""
    key_skills_id: List[int] = []
    key_skills_name: List[str] = []
    key_skills: str = ""
    status: int = 1
    is_deleted: int = 0
    updated_at: datetime = Field(default_factory=datetime.utcnow)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    provider: Optional[str] = None
    completion_date: Optional[str] = None
    duration: Optional[str] = None

    class Config:
        arbitrary_types_allowed = True


class JobseekerProjectDetails(BaseModel):
    id: int
    jobseeker_id: int
    project_title: str = ""
    organization_name: str = ""
    project_url: str = ""
    project_description: str = ""
    project_start_date: Optional[datetime] = None
    project_end_date: Optional[datetime] = None
    status: int = 1
    is_deleted: int = 0
    updated_at: datetime = Field(default_factory=datetime.utcnow)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    technologies: List[str] = []
    start_date: Optional[str] = None
    end_date: Optional[str] = None

    class Config:
        arbitrary_types_allowed = True


class JobseekerCertificationDetails(BaseModel):
    id: int
    jobseeker_id: int
    certificate_name: str = ""
    completion_location: str = ""
    completion_year: int = 0
    institute_name: str = ""
    status: int = 1
    is_deleted: int = 0
    updated_at: datetime = Field(default_factory=datetime.utcnow)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    issue_date: Optional[str] = None
    expiry_date: Optional[str] = None
    credential_id: Optional[str] = None
    url: Optional[str] = None

    class Config:
        arbitrary_types_allowed = True