"""Pydantic schemas for mentorship models."""

from datetime import datetime
from typing import Optional
from uuid import UUID

from pydantic import BaseModel

from app.models.mentorship import MentorStatus, MentorshipSessionStatus, SectorType


# Mentor Schemas
class MentorBase(BaseModel):
    full_name: str
    email: str
    phone: Optional[str] = None
    gender: Optional[str] = None
    sector: SectorType
    years_experience: Optional[int] = None
    expertise: Optional[str] = None
    company: Optional[str] = None
    job_title: Optional[str] = None
    bio: Optional[str] = None


class MentorCreate(MentorBase):
    pass


class MentorResponse(MentorBase):
    id: UUID
    user_id: Optional[UUID] = None
    status: MentorStatus
    applied_date: datetime
    approved_date: Optional[datetime] = None
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True


# Mentor-Mentee Assignment Schema
class MentorMenteeBase(BaseModel):
    mentor_id: UUID
    student_id: UUID
    notes: Optional[str] = None


class MentorMenteeCreate(MentorMenteeBase):
    pass


class MentorMenteeResponse(MentorMenteeBase):
    id: UUID
    assigned_date: datetime
    assigned_by: Optional[UUID] = None
    is_active: bool
    ended_date: Optional[datetime] = None
    end_reason: Optional[str] = None
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True


# Mentorship Session Schema
class MentorshipSessionBase(BaseModel):
    assignment_id: UUID
    mentor_id: UUID
    session_date: datetime
    duration_minutes: Optional[int] = None
    status: MentorshipSessionStatus = MentorshipSessionStatus.SCHEDULED
    topic: Optional[str] = None
    notes: Optional[str] = None
    student_feedback: Optional[str] = None
    mentor_feedback: Optional[str] = None


class MentorshipSessionCreate(MentorshipSessionBase):
    pass


class MentorshipSessionResponse(MentorshipSessionBase):
    id: UUID
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True
