{"version":3,"sources":["../src/types/recommendedLessons.ts"],"sourcesContent":["/**\n * Recommended Lessons / Recommended Class (Aulas Recomendadas) Type Definitions\n * Based on /recommended-class/history endpoint\n */\n\nimport {\n  GenericApiStatus,\n  GenericDisplayStatus,\n  BadgeActionType,\n  getStatusBadgeAction,\n} from './common';\n\n/**\n * Recommended Class status from backend API\n * Re-exported from common for backward compatibility\n */\nexport { GenericApiStatus as RecommendedClassApiStatus } from './common';\n\n/**\n * Recommended Class status for display in UI (Badge component)\n * Re-exported from common for backward compatibility\n */\nexport { GenericDisplayStatus as RecommendedClassDisplayStatus } from './common';\n\n/**\n * Badge action types for recommended class status visualization\n * Re-exported from common for backward compatibility\n */\nexport { BadgeActionType as RecommendedClassBadgeActionType } from './common';\n\n/**\n * Subject info from API response\n */\nexport interface RecommendedClassSubject {\n  id: string;\n  name: string;\n}\n\n/**\n * Creator info from API response\n */\nexport interface RecommendedClassCreator {\n  id: string;\n  name: string;\n}\n\n/**\n * Recommended Class stats from API response\n */\nexport interface RecommendedClassStats {\n  totalStudents: number;\n  completedCount: number;\n  completionPercentage: number;\n}\n\n/**\n * Class breakdown info from API response\n */\nexport interface RecommendedClassBreakdown {\n  classId: string;\n  className: string;\n  schoolId: string;\n  schoolName: string;\n  schoolYearId?: string;\n  schoolYearName?: string;\n  studentCount: number;\n  completedCount: number;\n}\n\n/**\n * Recommended Class data from API response\n */\nexport interface RecommendedClassData {\n  id: string;\n  title: string;\n  startDate: string | null;\n  finalDate: string | null;\n  createdAt: string;\n  progress: number;\n  totalLessons: number;\n}\n\n/**\n * Editable fields of a recommended class (history item)\n */\nexport interface UpdateRecommendedClassData {\n  title?: string;\n  startDate?: string;\n  finalDate?: string;\n}\n\n/**\n * Recommended Class history item from /recommended-class/history endpoint\n */\nexport interface RecommendedClassHistoryItem {\n  recommendedClass: RecommendedClassData;\n  subject: RecommendedClassSubject | null;\n  creator: RecommendedClassCreator | null;\n  stats: RecommendedClassStats;\n  breakdown: RecommendedClassBreakdown[];\n}\n\n/**\n * Recommended Class table item interface for recommended class list table\n */\nexport interface RecommendedClassTableItem extends Record<string, unknown> {\n  id: string;\n  startDate: string | null;\n  deadline: string | null;\n  creator: string;\n  /** Id of the user who created the recommended class, or null when unknown. */\n  creatorId: string | null;\n  title: string;\n  school: string;\n  year: string;\n  subject: string;\n  class: string;\n  status: GenericDisplayStatus;\n  completionPercentage: number;\n}\n\n/**\n * Recommended Class history API complete response from /recommended-class/history\n */\nexport interface RecommendedClassHistoryApiResponse {\n  message: string;\n  data: {\n    recommendedClass: RecommendedClassHistoryItem[];\n    total: number;\n  };\n}\n\n/**\n * Recommended Class history filters for API query parameters\n */\nexport interface RecommendedClassHistoryFilters {\n  page?: number;\n  limit?: number;\n  status?: GenericApiStatus;\n  search?: string;\n  startDate?: string;\n  finalDate?: string;\n  subjectId?: string;\n  schoolId?: string;\n  schoolIds?: string[];\n  schoolYearId?: string;\n  schoolYearIds?: string[];\n  classId?: string;\n  classIds?: string[];\n  studentIds?: string[];\n  creatorType?: string;\n  sortBy?: 'createdAt' | 'finalDate' | 'title' | 'completionPercentage';\n  sortOrder?: 'asc' | 'desc';\n}\n\n/**\n * Pagination info for recommended class history\n */\nexport interface RecommendedClassHistoryPagination {\n  total: number;\n  page: number;\n  limit: number;\n  totalPages: number;\n}\n\n/**\n * Filter option for dropdowns\n * Extends with index signature to be compatible with CheckBoxGroup Item type\n */\nexport interface RecommendedClassFilterOption {\n  id: string;\n  name: string;\n  [key: string]: unknown;\n}\n\n/**\n * User data for filter options (schools, classes, subjects)\n */\nexport interface RecommendedClassUserFilterData {\n  schools?: Array<{ id: string; name: string }>;\n  classes?: Array<{ id: string; name: string; schoolId?: string }>;\n  subjects?: Array<{ id: string; name: string }>;\n  schoolYears?: Array<{ id: string; name: string }>;\n}\n\n/**\n * Get status badge action based on recommended class display status\n * @param status - Recommended Class display status\n * @returns Badge action type for styling\n */\nexport const getRecommendedClassStatusBadgeAction = (\n  status: GenericDisplayStatus\n): BadgeActionType => getStatusBadgeAction(status);\n\n/**\n * Recommended Class status options for filter (Vencida and Ativa)\n */\nexport const RECOMMENDED_CLASS_FILTER_STATUS_OPTIONS: RecommendedClassFilterOption[] =\n  [\n    { id: GenericApiStatus.VENCIDA, name: 'Vencida' },\n    { id: GenericApiStatus.A_VENCER, name: 'Ativa' },\n  ];\n\n/**\n * All recommended class status options\n */\nexport const RECOMMENDED_CLASS_STATUS_OPTIONS: RecommendedClassFilterOption[] =\n  [\n    { id: GenericApiStatus.A_VENCER, name: 'A Vencer' },\n    { id: GenericApiStatus.VENCIDA, name: 'Vencida' },\n    { id: GenericApiStatus.CONCLUIDA, name: 'Concluída' },\n  ];\n\n// ============================================\n// Recommended Lesson Details Types\n// Based on /recommended class/{id} and /recommended class/{id}/details endpoints\n// ============================================\n\n/**\n * Student status for display in UI\n */\nexport enum StudentLessonStatus {\n  A_INICIAR = 'A INICIAR',\n  EM_ANDAMENTO = 'EM ANDAMENTO',\n  NAO_FINALIZADO = 'NÃO FINALIZADO',\n  CONCLUIDO = 'CONCLUÍDO',\n}\n\n/**\n * Badge action type for student status\n */\nexport const getStudentStatusBadgeAction = (\n  status: StudentLessonStatus\n): 'success' | 'warning' | 'error' | 'info' => {\n  const actionMap: Record<\n    StudentLessonStatus,\n    'success' | 'warning' | 'error' | 'info'\n  > = {\n    [StudentLessonStatus.CONCLUIDO]: 'success',\n    [StudentLessonStatus.EM_ANDAMENTO]: 'info',\n    [StudentLessonStatus.A_INICIAR]: 'warning',\n    [StudentLessonStatus.NAO_FINALIZADO]: 'error',\n  };\n  return actionMap[status] ?? 'warning';\n};\n\n/**\n * Checks if a deadline has passed\n * @param deadline - ISO date string of the deadline\n * @returns true if deadline has passed, false otherwise\n */\nexport const isDeadlinePassed = (deadline: string | null): boolean => {\n  if (!deadline) return false;\n  return new Date(deadline) < new Date();\n};\n\n/**\n * Derives student display status from progress, completedAt, and deadline\n * @param progress - Student progress percentage (0-100)\n * @param completedAt - ISO date string when student completed, or null\n * @param deadline - ISO date string of the recommended class deadline, or null\n * @returns The appropriate StudentLessonStatus\n */\nexport const deriveStudentStatus = (\n  progress: number,\n  completedAt: string | null,\n  deadline?: string | null\n): StudentLessonStatus => {\n  // If completed (either by completedAt or 100% progress), it's CONCLUIDO\n  if (completedAt) return StudentLessonStatus.CONCLUIDO;\n  if (progress === 100) return StudentLessonStatus.CONCLUIDO;\n\n  // If deadline passed and not completed, it's NAO_FINALIZADO\n  if (isDeadlinePassed(deadline ?? null) && progress < 100) {\n    return StudentLessonStatus.NAO_FINALIZADO;\n  }\n\n  // Otherwise, derive from progress\n  if (progress === 0) return StudentLessonStatus.A_INICIAR;\n  if (progress > 0) return StudentLessonStatus.EM_ANDAMENTO;\n  return StudentLessonStatus.A_INICIAR;\n};\n\n/**\n * Formats days to complete as a readable string\n */\nexport const formatDaysToComplete = (\n  daysToComplete: number | null\n): string | null => {\n  if (daysToComplete === null) return null;\n  if (daysToComplete === 1) return '1 dia';\n  return `${daysToComplete} dias`;\n};\n\n// ============================================\n// API Response Types - /recommended class/{id}/details\n// ============================================\n\n/**\n * Student data from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailStudent {\n  userInstitutionId: string;\n  userId: string;\n  name: string;\n  progress: number;\n  completedAt: string | null;\n  avgScore: number | null;\n  daysToComplete: number | null;\n}\n\n/**\n * Aggregated stats from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailAggregated {\n  completionPercentage: number;\n  avgScore: number | null;\n}\n\n/**\n * Content performance item from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailContentPerformanceItem {\n  contentId: string;\n  contentName: string;\n  rate: number;\n}\n\n/**\n * Content performance from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailContentPerformance {\n  best: RecommendedClassDetailContentPerformanceItem | null;\n  worst: RecommendedClassDetailContentPerformanceItem | null;\n}\n\n/**\n * Activity item from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailActivity {\n  id: string;\n  title: string;\n}\n\n/**\n * Response data from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailsData {\n  students: RecommendedClassDetailStudent[];\n  aggregated: RecommendedClassDetailAggregated;\n  contentPerformance: RecommendedClassDetailContentPerformance;\n  activities?: RecommendedClassDetailActivity[];\n}\n\n/**\n * Full API response from /recommended class/{id}/details endpoint\n */\nexport interface RecommendedClassDetailsApiResponse {\n  message: string;\n  data: RecommendedClassDetailsData;\n}\n\n// ============================================\n// Recommended Class Activity Types - /recommended class/{id} activities\n// ============================================\n\n/**\n * Activity status for recommended class activities\n * Used in activitiesRecommendedClass array from /recommended class/{id} endpoint\n */\nexport const RECOMMENDED_CLASS_ACTIVITY_STATUS = {\n  PENDENTE: 'PENDENTE',\n  CONCLUIDA: 'CONCLUIDA',\n  EXPIRADA: 'EXPIRADA',\n  AGUARDANDO_CORRECAO: 'AGUARDANDO_CORRECAO',\n  AGUARDANDO_RESPOSTA: 'AGUARDANDO_RESPOSTA',\n} as const;\n\nexport type RecommendedClassActivityStatus =\n  (typeof RECOMMENDED_CLASS_ACTIVITY_STATUS)[keyof typeof RECOMMENDED_CLASS_ACTIVITY_STATUS];\n\n/**\n * Activity details within a recommended class\n */\nexport interface RecommendedClassActivity {\n  id: string;\n  title: string;\n  status: RecommendedClassActivityStatus;\n}\n\n/**\n * User activities within a recommended class\n */\nexport interface RecommendedClassSupUsersActivities {\n  id: string;\n  activity: RecommendedClassActivity;\n  activityId: string;\n  userInstitutionId: string;\n  answeredAt: string | null;\n  timeSpent: number;\n  score: string | null;\n  lastInteraction: string;\n  studentStatus: RecommendedClassActivityStatus;\n}\n\n/**\n * Activities associated with a recommended class\n */\nexport interface RecommendedClassActivities {\n  recommendedClassId: string;\n  supUsersActivitiesId: string;\n  supUsersActivities: RecommendedClassSupUsersActivities;\n}\n\n// ============================================\n// API Response Types - /recommended class/{id}\n// ============================================\n\n/**\n * Subject info from lesson in /recommended class/{id} response\n */\nexport interface RecommendedClassLessonSubject {\n  id: string;\n  name: string;\n  color: string;\n  icon: string;\n}\n\n/**\n * Lesson info from /recommended class/{id} response\n */\nexport interface RecommendedClassLesson {\n  id: string;\n  videoTitle?: string;\n  content: { id: string; name: string };\n  subtopic: { id: string; name: string };\n  topic: { id: string; name: string };\n  subject: RecommendedClassLessonSubject;\n}\n\n/**\n * Lesson progress from /recommended class/{id} response\n */\nexport interface RecommendedClassLessonProgress {\n  id: string;\n  userId: string;\n  lessonId: string;\n  progress: number;\n  lesson: RecommendedClassLesson;\n}\n\n/**\n * Lesson recommended class item from /recommended class/{id} response\n */\nexport interface RecommendedClassLessonsItem {\n  recommendedClassId: string;\n  supLessonsProgressId: string;\n  supLessonsProgress: RecommendedClassLessonProgress;\n}\n\n/**\n * Recommended Class metadata from /recommended class/{id} endpoint\n */\nexport interface RecommendedClassMetadata {\n  id: string;\n  title: string;\n  startDate: string;\n  finalDate: string;\n  progress: number;\n  lessons: RecommendedClassLessonsItem[];\n  activities?: RecommendedClassActivities[];\n}\n\n/**\n * Full API response from /recommended class/{id} endpoint\n */\nexport interface RecommendedClassApiResponse {\n  message: string;\n  data: RecommendedClassMetadata;\n}\n\n// ============================================\n// Combined Data for Component\n// ============================================\n\n/**\n * Combined data structure for RecommendedLessonDetails component\n * Combines data from /recommended class/{id}, /recommended class/{id}/details, and breakdown info\n */\nexport interface LessonDetailsData {\n  /** Recommended Class metadata from /recommended class/{id} */\n  recommendedClass: RecommendedClassMetadata;\n  /** Details from /recommended class/{id}/details */\n  details: RecommendedClassDetailsData;\n  /** Optional breakdown info from /recommended-class/history */\n  breakdown?: RecommendedClassBreakdown;\n}\n\n// ============================================\n// Recommended Class Draft/Model Types\n// Based on /recommended-class/drafts endpoint\n// ============================================\n\n/**\n * Recommended Class draft type enum - matches backend RECOMMENDED_CLASS_DRAFT_TYPE\n */\nexport enum RecommendedClassDraftType {\n  MODELO = 'MODELO',\n  RASCUNHO = 'RASCUNHO',\n}\n\n/**\n * Recommended Class model response from backend API /recommended-class/drafts\n */\nexport interface RecommendedClassModelResponse {\n  id: string;\n  type: RecommendedClassDraftType;\n  title: string;\n  description: string | null;\n  creatorUserInstitutionId: string;\n  subjectId: string | null;\n  subject?: { id: string; name: string } | null;\n  startDate: string | null;\n  finalDate: string | null;\n  createdAt: string;\n  updatedAt: string;\n  /** Activity drafts attached to this model (returned by\n   *  GET /recommended-class/drafts). Used to derive whether the model has\n   *  any activities for the \"Permitir refazer?\" field on the send modal. */\n  activityDrafts?: Array<{\n    activityDraftId: string;\n    sequence: number;\n    title?: string | null;\n  }>;\n}\n\n/**\n * Recommended Class model table item for display in models table\n */\nexport interface RecommendedClassModelTableItem extends Record<\n  string,\n  unknown\n> {\n  id: string;\n  title: string;\n  savedAt: string;\n  subject: string;\n  subjectId: string | null;\n  /** Number of activity drafts attached to this model. */\n  activityDraftsCount?: number;\n}\n\n/**\n * Recommended Class models API complete response from /recommended-class/drafts\n */\nexport interface RecommendedClassModelsApiResponse {\n  message: string;\n  data: {\n    drafts: RecommendedClassModelResponse[];\n    total: number;\n  };\n}\n\n/**\n * Recommended Class model filters for API query parameters\n */\nexport interface RecommendedClassModelFilters {\n  page?: number;\n  limit?: number;\n  search?: string;\n  subjectId?: string;\n  type?: RecommendedClassDraftType;\n}\n\n/**\n * Pagination info for recommended class models\n */\nexport interface RecommendedClassModelPagination {\n  total: number;\n  page: number;\n  limit: number;\n  totalPages: number;\n}\n"],"mappings":";;;;;AA8LO,IAAM,uCAAuC,CAClD,WACoB,qBAAqB,MAAM;AAK1C,IAAM,0CACX;AAAA,EACE,EAAE,6BAA8B,MAAM,UAAU;AAAA,EAChD,EAAE,+BAA+B,MAAM,QAAQ;AACjD;AAKK,IAAM,mCACX;AAAA,EACE,EAAE,+BAA+B,MAAM,WAAW;AAAA,EAClD,EAAE,6BAA8B,MAAM,UAAU;AAAA,EAChD,EAAE,iCAAgC,MAAM,eAAY;AACtD;AAUK,IAAK,sBAAL,kBAAKA,yBAAL;AACL,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,kBAAe;AACf,EAAAA,qBAAA,oBAAiB;AACjB,EAAAA,qBAAA,eAAY;AAJF,SAAAA;AAAA,GAAA;AAUL,IAAM,8BAA8B,CACzC,WAC6C;AAC7C,QAAM,YAGF;AAAA,IACF,CAAC,8BAA6B,GAAG;AAAA,IACjC,CAAC,iCAAgC,GAAG;AAAA,IACpC,CAAC,2BAA6B,GAAG;AAAA,IACjC,CAAC,wCAAkC,GAAG;AAAA,EACxC;AACA,SAAO,UAAU,MAAM,KAAK;AAC9B;AAOO,IAAM,mBAAmB,CAAC,aAAqC;AACpE,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,IAAI,KAAK,QAAQ,IAAI,oBAAI,KAAK;AACvC;AASO,IAAM,sBAAsB,CACjC,UACA,aACA,aACwB;AAExB,MAAI,YAAa,QAAO;AACxB,MAAI,aAAa,IAAK,QAAO;AAG7B,MAAI,iBAAiB,YAAY,IAAI,KAAK,WAAW,KAAK;AACxD,WAAO;AAAA,EACT;AAGA,MAAI,aAAa,EAAG,QAAO;AAC3B,MAAI,WAAW,EAAG,QAAO;AACzB,SAAO;AACT;AAKO,IAAM,uBAAuB,CAClC,mBACkB;AAClB,MAAI,mBAAmB,KAAM,QAAO;AACpC,MAAI,mBAAmB,EAAG,QAAO;AACjC,SAAO,GAAG,cAAc;AAC1B;AA8EO,IAAM,oCAAoC;AAAA,EAC/C,UAAU;AAAA,EACV,WAAW;AAAA,EACX,UAAU;AAAA,EACV,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAkIO,IAAK,4BAAL,kBAAKC,+BAAL;AACL,EAAAA,2BAAA,YAAS;AACT,EAAAA,2BAAA,cAAW;AAFD,SAAAA;AAAA,GAAA;","names":["StudentLessonStatus","RecommendedClassDraftType"]}