import type {
  StudentDashboardGradeProps,
  StudentHomeworkAssignmentListItem,
} from "@/modules/homework/types"
import type { StudentEnrolledClass } from "@/modules/classes/types"
import type { StudentGradeSummary } from "@/modules/grades/types"

/** 家长与子女的关系记录（来自 parentStudentRelations 表）。 */
export type ParentChildRelation = {
  id: string
  parentId: string
  studentId: string
  /** 关系类型，如 "father"、"mother"、"guardian" 等。 */
  relation: string | null
  createdAt: string
}

/** 子女基本信息（聚合自 users 表 + 班级 + 年级）。 */
export type ChildBasicInfo = {
  id: string
  name: string | null
  email: string
  image: string | null
  gradeName: string | null
  className: string | null
  classId: string | null
  /** 当前家长与该子女的关系类型。 */
  relation: string | null
}

/** 单条今日课表项。 */
export type ChildScheduleItem = {
  id: string
  classId: string
  className: string
  course: string
  startTime: string
  endTime: string
  location: string | null
}

/** 单条周课表项（含 weekday）。 */
export type ChildWeeklyScheduleItem = ChildScheduleItem & {
  /** 1=周一 ... 7=周日 */
  weekday: 1 | 2 | 3 | 4 | 5 | 6 | 7
}

/** 子女作业摘要（统计计数 + 最近作业列表）。 */
export type ChildHomeworkSummaryData = {
  pendingCount: number
  submittedCount: number
  gradedCount: number
  overdueCount: number
  /** 按截止时间升序排列的最近 5 条作业。 */
  recentAssignments: StudentHomeworkAssignmentListItem[]
}

/** 单个子女的仪表盘聚合数据。 */
export type ChildDashboardData = {
  basicInfo: ChildBasicInfo
  enrolledClasses: StudentEnrolledClass[]
  todaySchedule: ChildScheduleItem[]
  /** 完整周课表（按 weekday 升序）。 */
  weeklySchedule: ChildWeeklyScheduleItem[]
  homeworkSummary: ChildHomeworkSummaryData
  /** 成绩趋势数据；`trend` 按时间升序，`recent` 按时间降序。 */
  gradeTrend: StudentDashboardGradeProps
  gradeSummary: StudentGradeSummary | null
  /** V3-11: 考试结果列表（已批改的考试关联作业提交） */
  examResults: ChildExamResultItem[]
}

/** V3-11: 单条考试结果（家长端展示用） */
export type ChildExamResultItem = {
  submissionId: string
  examId: string
  examTitle: string
  assignmentId: string
  assignmentTitle: string
  score: number
  maxScore: number
  submittedAt: string | null
  status: string
}

/** 家长仪表盘聚合数据（家长姓名 + 所有子女数据）。 */
export type ParentDashboardData = {
  parentName: string | null
  children: ChildDashboardData[]
}

/* ------------------------------------------------------------------ */
/* 考勤视图模型（解耦 parent 模块对 attendance/types 的直接依赖）        */
/* ------------------------------------------------------------------ */

/**
 * 家长视角所需的考勤状态枚举。
 * 与 `attendance.AttendanceStatus` 结构兼容，但由 parent 模块自行声明，
 * 避免 parent 反向依赖 attendance 模块的类型变更。
 */
export type ParentAttendanceStatus =
  | "present"
  | "absent"
  | "late"
  | "early_leave"
  | "excused"
  | "school_activity"

/** 家长视角所需的单条考勤记录（仅保留展示字段）。 */
export type ParentAttendanceListItem = {
  id: string
  date: string
  status: ParentAttendanceStatus
  reason: string | null
  remark: string | null
}

/** 家长视角所需的考勤统计（仅保留展示字段）。 */
export type ParentAttendanceStats = {
  total: number
  present: number
  absent: number
  late: number
  presentRate: number
}

/** 家长视角所需的单个子女考勤汇总。 */
export type ParentStudentAttendanceSummary = {
  studentId: string
  studentName: string
  stats: ParentAttendanceStats
  recentRecords: ParentAttendanceListItem[]
}

