import type { PageParam, PageResult } from '#/packages/effects/request/src';

import { requestClient } from '#/api/request';

export namespace HrmTrainingApi {
  /** 培训参训人员 */
  export interface Participant {
    id?: number;
    trainingId?: number;
    employeeId?: number;
    employeeNo?: string;
    employeeName?: string;
    attended?: boolean;
    score?: number;
    isPass?: boolean;
    certificateId?: number;
    remark?: string;
    createTime?: string;
  }

  /** 培训活动 */
  export interface Training {
    id?: number;
    trainingNo?: string;
    name?: string;
    trainingType?: number;
    trainingTypeName?: string;
    trainer?: string;
    location?: string;
    hours?: number;
    startDate?: string;
    endDate?: string;
    issueCertificate?: boolean;
    certValidityMonths?: number;
    status?: number;
    statusName?: string;
    participantCount?: number;
    participants?: Participant[];
    remark?: string;
    createTime?: string;
  }

  /** 培训活动查询参数 */
  export interface TrainingPageParam extends PageParam {
    trainingNo?: string;
    name?: string;
    trainingType?: number;
    status?: number;
  }
}

/** 查询培训活动分页 */
export function getTrainingPage(params: HrmTrainingApi.TrainingPageParam) {
  return requestClient.get<PageResult<HrmTrainingApi.Training>>(
    '/hrm/training/page',
    { params },
  );
}

/** 查询培训活动详情（含参训人员） */
export function getTraining(id: number) {
  return requestClient.get<HrmTrainingApi.Training>(`/hrm/training/get?id=${id}`);
}

/** 创建培训活动 */
export function createTraining(data: ReqTraining) {
  return requestClient.post('/hrm/training/create', data);
}

/** 更新培训活动 */
export function updateTraining(data: ReqTraining) {
  return requestClient.put('/hrm/training/update', data);
}

/** 删除培训活动 */
export function deleteTraining(ids: number[]) {
  return requestClient.delete('/hrm/training/delete', { params: { ids: ids.join(',') } });
}

/** 开始培训（草稿 → 待开展） */
export function startTraining(id: number) {
  return requestClient.post('/hrm/training/start', null, { params: { id } });
}

/** 完成培训（草稿/待开展 → 已完成） */
export function completeTraining(id: number) {
  return requestClient.post('/hrm/training/complete', null, { params: { id } });
}

/** 取消培训（草稿/待开展 → 已取消） */
export function cancelTraining(id: number) {
  return requestClient.post('/hrm/training/cancel', null, { params: { id } });
}

/** 批量添加参训员工 */
export function addTrainingParticipants(trainingId: number, employeeIds: number[]) {
  return requestClient.post('/hrm/training-participant/add', { trainingId, employeeIds });
}

/** 更新参训记录 */
export function updateTrainingParticipant(data: ReqParticipant) {
  return requestClient.put('/hrm/training-participant/update', data);
}

/** 删除参训记录 */
export function deleteTrainingParticipants(ids: number[]) {
  return requestClient.delete('/hrm/training-participant/delete', {
    params: { ids: ids.join(',') },
  });
}

/** 获取某次培训的参训人员列表 */
export function getTrainingParticipants(trainingId: number) {
  return requestClient.get<HrmTrainingApi.Participant[]>(
    `/hrm/training-participant/list?trainingId=${trainingId}`,
  );
}

/** 培训活动新增/更新请求 */
export interface ReqTraining {
  id?: number;
  name?: string;
  trainingType?: number;
  trainer?: string;
  location?: string;
  hours?: number;
  startDate?: string;
  endDate?: string;
  issueCertificate?: boolean;
  certValidityMonths?: number;
  remark?: string;
}

/** 参训记录更新请求 */
export interface ReqParticipant {
  id?: number;
  attended?: boolean;
  score?: number;
  isPass?: boolean;
  remark?: string;
}