export type AttendanceStatus =
  | "present"
  | "absent"
  | "late"
  | "early_leave"
  | "excused"
  | "school_activity"

/**
 * L-6 节次考勤：节次类型。
 * - morning_reading: 早读
 * - morning: 上午
 * - afternoon: 下午
 * - evening: 晚自习
 * - full_day: 全日（默认值，向后兼容 null）
 */
export type AttendancePeriod =
  | "morning_reading"
  | "morning"
  | "afternoon"
  | "evening"
  | "full_day"

export interface AttendanceRecord {
  id: string
  studentId: string
  classId: string
  scheduleId: string | null
  date: string
  status: AttendanceStatus
  /** L-6：节次（null 视为 full_day，向后兼容） */
  period: AttendancePeriod | null
  remark: string | null
  reason: string | null
  recordedBy: string
  createdAt: string
  updatedAt: string
}

export interface AttendanceListItem {
  id: string
  studentId: string
  studentName: string
  classId: string
  className: string
  scheduleId: string | null
  date: string
  status: AttendanceStatus
  /** L-6：节次（null 视为 full_day，向后兼容） */
  period: AttendancePeriod | null
  remark: string | null
  reason: string | null
  recordedBy: string
  recorderName: string
  createdAt: string
}

export interface AttendanceStats {
  total: number
  present: number
  absent: number
  late: number
  earlyLeave: number
  excused: number
  schoolActivity: number
  presentRate: number
  lateRate: number
}

export interface StudentAttendanceSummary {
  studentId: string
  studentName: string
  stats: AttendanceStats
  recentRecords: AttendanceListItem[]
}

export interface ClassAttendanceSummary {
  classId: string
  className: string
  date: string
  stats: AttendanceStats
  studentRecords: AttendanceListItem[]
}

export interface AttendanceRule {
  id: string
  classId: string | null
  lateThresholdMinutes: number | null
  earlyLeaveThresholdMinutes: number | null
  enableAutoMark: boolean | null
  attendanceRateThreshold: number | null
  consecutiveAbsenceThreshold: number | null
  createdAt: string
  updatedAt: string
}

/** L-3：出勤率预警严重等级。 */
export type AttendanceWarningSeverity = "high" | "medium" | "low"

/** L-3：单个学生的出勤率预警。 */
export interface AttendanceWarning {
  studentId: string
  studentName: string
  /** 触发的预警类型。 */
  type: "low_attendance_rate" | "consecutive_absence"
  /** 严重等级。 */
  severity: AttendanceWarningSeverity
  /** 当前数值（出勤率百分比或连续缺勤次数）。 */
  currentValue: number
  /** 配置的阈值。 */
  threshold: number
  /** 最近记录日期列表（用于连续缺勤场景，按日期升序）。 */
  relatedDates: string[]
}

/** L-3：班级所有学生的预警汇总。 */
export interface AttendanceWarningSummary {
  classId: string
  className: string
  /** 配置的阈值（取班级规则或默认值）。 */
  attendanceRateThreshold: number
  consecutiveAbsenceThreshold: number
  /** 触发的预警列表。 */
  warnings: AttendanceWarning[]
}

/** L-4：单日趋势数据点。 */
export interface AttendanceTrendPoint {
  /** 日期（YYYY-MM-DD）。 */
  date: string
  /** 出勤率（百分比，0-100）。 */
  presentRate: number
  /** 迟到率（百分比，0-100）。 */
  lateRate: number
  /** 缺勤率（百分比，0-100）。 */
  absentRate: number
  /** 当日记录总数。 */
  total: number
}

/** L-4：班级考勤趋势汇总。 */
export interface AttendanceTrendSummary {
  classId: string
  className: string
  /** 趋势粒度。 */
  granularity: "daily" | "weekly" | "monthly"
  /** 起始日期（含）。 */
  startDate: string
  /** 结束日期（含）。 */
  endDate: string
  /** 按时间升序的趋势数据点。 */
  points: AttendanceTrendPoint[]
}

/** L-7：单个班级的对比数据点。 */
export interface ClassComparisonItem {
  classId: string
  className: string
  /** 总记录数。 */
  total: number
  /** 出勤率（百分比，0-100）。 */
  presentRate: number
  /** 迟到率（百分比，0-100）。 */
  lateRate: number
  /** 缺勤率（百分比，0-100）。 */
  absentRate: number
}

/** L-7：同年级班级出勤率对比汇总。 */
export interface ClassComparisonSummary {
  /** 年级 ID。 */
  gradeId: string
  /** 年级名称。 */
  gradeName: string
  /** 起始日期（含）。 */
  startDate: string
  /** 结束日期（含）。 */
  endDate: string
  /** 各班级对比数据（按出勤率降序）。 */
  items: ClassComparisonItem[]
  /** 年级平均出勤率。 */
  averagePresentRate: number
}

export interface AttendanceQueryParams {
  classId?: string
  studentId?: string
  date?: string
  startDate?: string
  endDate?: string
  status?: AttendanceStatus
  /** L-6：按节次过滤（null/undefined 表示不按节次过滤） */
  period?: AttendancePeriod
  page?: number
  pageSize?: number
}

/**
 * L-9 考勤与成绩关联分析：风险等级。
 * - high：低出勤（<80%）且低分（<60）
 * - medium：中等出勤（<90%）且中低分（<75），但未达 high
 * - low：正常（其余情况）
 */
export type AttendanceGradeRiskLevel = "high" | "medium" | "low"

/**
 * L-9：单个学生在班级内的考勤-成绩关联数据点。
 * 每个学生作为散点图中的一个点（x=attendanceRate, y=averageScore）。
 */
export interface AttendanceGradeCorrelationItem {
  studentId: string
  studentName: string
  /** 出勤率（0-100，present+late 计为出勤） */
  attendanceRate: number
  /** 出勤记录总数 */
  attendanceRecordCount: number
  /** 缺勤次数（absent + early_leave） */
  absentCount: number
  /** 平均成绩（0-100，跨学科归一化后的加权平均） */
  averageScore: number
  /** 成绩记录总数 */
  gradeRecordCount: number
  /** 风险等级 */
  riskLevel: AttendanceGradeRiskLevel
}

/**
 * L-9：班级考勤-成绩关联分析汇总。
 */
export interface AttendanceGradeCorrelationSummary {
  classId: string
  className: string
  /** 起始日期（含） */
  startDate: string
  /** 结束日期（含） */
  endDate: string
  /** 学生数据点列表（按风险等级降序，再按出勤率升序） */
  items: AttendanceGradeCorrelationItem[]
  /** Pearson 相关系数 r（-1 到 +1），数据不足时为 null */
  correlation: number | null
  /** 相关系数解释（i18n key 后缀，如 "strong_negative"） */
  correlationInterpretation:
    | "strong_negative"
    | "weak_negative"
    | "negligible"
    | "weak_positive"
    | "strong_positive"
    | "insufficient_data"
  /** 各风险等级学生数 */
  riskCounts: {
    high: number
    medium: number
    low: number
  }
}

export interface PaginatedAttendanceResult {
  items: AttendanceListItem[]
  total: number
  page: number
  pageSize: number
  totalPages: number
}

/**
 * 注意：状态标签与颜色映射已迁移至 `./constants.ts`，
 * 使用 i18n key（`status.*`）+ Badge variant，由组件层通过 `useTranslations("attendance")` 解析。
 */
