from pydantic import BaseModel
from typing import Dict, List, Any, Optional

class Skill(BaseModel):
    skill_id: str
    skill_type: str
    skill_name: str

class JobProfile(BaseModel):
    job_profile_name: Optional[str] = None
    job_profile_skills: Optional[List[Skill]] = None

class ManagerInfo(BaseModel):
    user_name: str
    managerId: str
    designation: str
    jobProfile: Optional[JobProfile] = None
    assignedCourses: List[str] = []
    completedCourses: List[str] = []
    skills: List[Skill] = []

class UserInfo(BaseModel):
    user_name: str
    managerId: str
    designation: str
    jobProfile: Optional[JobProfile] = None
    assignedCourses: List[str] = []
    completedCourses: List[str] = []
    skills: List[Skill] = []

class UsersUnderManager(BaseModel):
    users: Dict[str, UserInfo]

class Course(BaseModel):
    courseId: str
    name: str
    short_description: str
    description: str
    skills: List[Skill] = []

class RecommendedCourse(BaseModel):
    courseId: str
    courseName: str

class TeamMemberRecommendation(BaseModel):
    user_id: str
    user_name: str
    recommended_courses: List[RecommendedCourse]
    skill_gaps: List[str]
    development_priority: str
    career_path_suggestion: str

class ManagerInsight(BaseModel):
    insight_type: str
    title: str
    description: str
    priority: str
    actionable_steps: List[str]

class TeamAnalytics(BaseModel):
    total_team_members: int
    skill_distribution: Dict[str, int]
    course_completion_rate: float
    top_skills_in_team: List[str]
    skill_gaps_identified: List[str]
    team_performance_summary: str

class Chart(BaseModel):
    chart_type: str
    title: str
    data: List[Dict[str, Any]]
    labels: List[str]
    colors: List[str]
    description: str
    insights: List[str]
    chart_config: Dict[str, Any]

class Table(BaseModel):
    title: str
    headers: List[str]
    rows: List[List[str]]
    description: str
    insights: List[str]
    styling: Dict[str, Any]

class DataVisualizations(BaseModel):
    charts: List[Chart]
    tables: List[Table]
    summary_metrics: Dict[str, Any]
    visualization_insights: List[str]

class ManagerCareerGuidanceRequest(BaseModel):
    client_id: int
    manager_query: str
    manager_data: Dict[str, ManagerInfo]
    users_under_manager_data: UsersUnderManager
    client_all_courses_data: Dict[int, List[Course]]

class ManagerCareerGuidanceResponse(BaseModel):
    answer: str
    manager_insights: List[ManagerInsight]
    team_recommendations: List[TeamMemberRecommendation]
    team_analytics: TeamAnalytics
    suggested_courses_for_manager: List[Dict[str, Any]]
    leadership_development_suggestions: List[str]
    team_skill_matrix: Dict[str, Any]
    career_roadmap_suggestions: Dict[str, Any]
    data_visualizations: DataVisualizations
    total_tokens: int
