import { z } from 'zod';

export const attendanceRecordSchema = z
  .object({
    id: z.number(),
    studentId: z.number(),
    classId: z.number().nullable(),
    attendanceDate: z.string(),
    session: z.string(),
    status: z.string(),
    remark: z.string().nullable(),
    createdAt: z.string(),
    student: z
      .object({ id: z.number(), name: z.string(), studentNo: z.string().nullable().optional() })
      .passthrough(),
    class: z.object({ id: z.number(), name: z.string() }).passthrough().nullable(),
  })
  .passthrough();

export const attendanceRecordsResponseSchema = z
  .object({ list: z.array(attendanceRecordSchema), total: z.number() })
  .passthrough();

export const attendanceSummarySchema = z
  .object({
    total: z.number(),
    present: z.number(),
    late: z.number(),
    absent: z.number(),
    leave: z.number(),
    pending: z.number(),
  })
  .passthrough();

export const dingTalkSyncStatusSchema = z
  .object({
    lastPulledAt: z.string().nullable(),
    action: z.string().nullable(),
    username: z.string().nullable(),
    detail: z.string().nullable(),
  })
  .passthrough();

/** 学生档案聚合 */

export const attendanceClassOptionSchema = z
  .object({ classId: z.number(), className: z.string() })
  .passthrough();

export const attendanceClassOptionsSchema = z.array(attendanceClassOptionSchema);

export const attendanceAlertSchema = z
  .object({ id: z.number(), type: z.string(), message: z.string() })
  .passthrough();

export const attendanceAlertsSchema = z.array(attendanceAlertSchema);

export const attendancePeriodSchema = z
  .object({
    periodKey: z.string(),
    label: z.string(),
    startTime: z.string(),
    endTime: z.string(),
    sortOrder: z.number(),
    enabled: z.boolean(),
  })
  .passthrough();

export const attendancePeriodsSchema = z.array(attendancePeriodSchema);

export const attendanceScheduleOptionSchema = z
  .object({
    id: z.number(),
    subject: z.string(),
    startTime: z.string(),
    endTime: z.string(),
  })
  .passthrough();

export const attendanceScheduleOptionsSchema = z.array(attendanceScheduleOptionSchema);
