import { http } from '@/utils/http/axios';
import type { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';

/**
 * 考核项目内容
 */
export interface EvaluationContent {
  id: number;
  psemId: number;
  serialNum: number;
  exProgram: string; // 考核项目
  exContent: string; // 考核内容
  scoringWay: string; // 评分方式
  isAdd?: number; // 是否加分项（0-否，1-是）
  reviewUserId?: number | null; // 复评人ID
  reviewUserName?: string; // 复评人姓名
}

/**
 * 安全考核管理返回对象
 */
export interface EvaluationSystemItem {
  id: number;
  exName: string; // 考核表名称
  attachments: string; // 考核文档
  ratingDescribe: string; // 评分说明
  deptNames: string; // 下发部门
  deptIds: string; // 下发部门ID
  planStartTime: string; // 计划开始时间
  planEndTime: string; // 计划结束时间
  status: number; // 状态（0-未下发/2-待反馈/3-待复核/4-待审核/5-已作废/1-已完成）
  statusName: string; // 状态名称
  createdUserId: number;
  createdUserName: string; // 创建人
  createdAt: string; // 创建时间
  updatedAt: string; // 更新时间
  isDeleted: number;
  exContents: EvaluationContent[]; // 考核项目列表
}

/**
 * 安全考核管理查询参数
 */
export interface EvaluationSystemQueryParam {
  psemId?: number;
  exName?: string; // 考核表名称
  status?: number; // 状态
  deptName?: string; // 所属部门
  userName?: string;
  planStartTime?: string; // 计划开始时间
  planEndTime?: string; // 计划结束时间
}

/**
 * 查询安全考核管理列表
 */
export function querySecurityExamine(query: QueryPageRequest<EvaluationSystemQueryParam>) {
  return http.request<QueryPageResponse<EvaluationSystemItem>>({
    url: '/securityExamine/admin/querySecurityExamine',
    method: 'post',
    data: query,
  });
}

/**
 * 导入考核项目详情
 */
export function importSecurityExamineDet(formData: FormData) {
  return http.request<EvaluationContent[]>({
    url: '/securityExamine/admin/importSecurityExamineDet',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  });
}

/**
 * 保存安全考核管理请求参数
 */
export interface SaveSecurityExamineRequest {
  id?: number; // 编辑时传ID，新增时为0或不传
  exName: string; // 考核表名称
  attachments: string; // 考核文档（附件URL字符串，多个用逗号分隔）
  ratingDescribe: string; // 评分说明
  deptNames?: string; // 下发部门
  deptIds?: number[]; // 下发部门ID数组
  getUserGroupId?: number;
  planStartTime?: string; // 计划开始时间
  planEndTime?: string; // 计划结束时间
  status: number; // 状态（0-未下发）
  createdUserId?: number; // 创建人ID
  createdUserName?: string; // 创建人名称
  exContents: EvaluationContent[]; // 考核项目列表
}

/**
 * 保存安全考核管理（新增/编辑）
 */
export function saveSecurityExamine(data: SaveSecurityExamineRequest) {
  return http.request({
    url: '/securityExamine/admin/saveSecurityExamine',
    method: 'post',
    data,
  });
}

/**
 * 查询安全考核管理详情
 */
export function querySecurityExamineDetail(id: number) {
  return http.request<EvaluationSystemItem>({
    url: `/securityExamine/admin/querySecurityExamineDetail`,
    method: 'get',
    params: { id },
  });
}

/**
 * 删除安全考核管理
 */
export function deleteSecurityExamine(id: number) {
  return http.request({
    url: `/securityExamine/admin/deleteSecurityExamine?id=${id}`,
    method: 'delete',
    // params: { id },
  });
}

/**
 * 更新安全考核管理请求参数（编辑时使用）
 */
export interface UpdateSecurityExamineRequest {
  id: number; // 必须传ID
  exName: string; // 考核表名称
  attachments: string; // 考核文档（附件URL字符串，多个用逗号分隔）
  ratingDescribe: string; // 评分说明
  deptNames?: string; // 下发部门
  deptIds?: number[]; // 下发部门ID数组
  getUserGroupId?: number;
  planStartTime?: string; // 计划开始时间
  planEndTime?: string; // 计划结束时间
  status: number; // 状态
  createdUserId?: number; // 创建人ID
  createdUserName?: string; // 创建人名称
  exContents: EvaluationContent[]; // 考核项目列表
}

/**
 * 更新安全考核管理（编辑）
 */
export function updateSecurityExamine(data: UpdateSecurityExamineRequest) {
  return http.request({
    url: '/securityExamine/admin/updateSecurityExamine',
    method: 'put',
    data,
  });
}

/**
 * 下发安全考核表请求参数
 */
export interface SaveSecurityExamineIssueRequest {
  id: number;
  deptNames: string; // 部门名称（逗号分隔）
  deptIds: number[]; // 部门ID（多选）
  getUserGroupId?: number; // 分组ID
  deptSelfApproveUserId?: number; // 部门自评审核人ID
  planStartTime?: string; // 计划开始时间
  planEndTime?: string; // 计划结束时间
}

/**
 * 下发安全考核表
 */
export function saveSecurityExamineIssue(data: SaveSecurityExamineIssueRequest) {
  return http.request({
    url: '/securityExamine/admin/saveSecurityExamineIssue',
    method: 'post',
    data,
  });
}

/**
 * 部门自评审核人
 */
export interface SecurityExamineSelfApproveUser {
  id: number;
  realname: string;
}

/**
 * 查询部门自评审核人列表
 * @param id 考核表ID
 */
export function querySecurityExamineSelfApprove(id: number) {
  return http.request<SecurityExamineSelfApproveUser[]>({
    url: '/securityExamine/admin/querySecurityExamineSelfApprove',
    method: 'get',
    params: { id },
  });
}

/**
 * 考核对象评分项
 */
export interface EvaluationScoreItem {
  id: number;
  psemId: number;
  psedId: number;
  pseiId: number;
  serialNum: number;
  exProgram: string; // 考核项目
  exContent: string; // 考核内容
  scoringWay: string; // 评分方式
  selfScore: number; // 自评分数
  attachments: string; // 附件
  reviewScore: number; // 审核分数
  isAdd?: number; // 是否加分项（0-否，1-是）
  createdAt: string;
  updatedAt: string;
  isDeleted: number;
}

/**
 * 考核对象列表项
 */
export interface EvaluationTargetItem {
  id: number;
  psemId: number; // 考核表ID
  deptName: string; // 部门名称
  exName: string; // 考核表名称
  attachments: string; // 考核文档
  planEndTime: string; // 计划结束时间
  deptId: number; // 部门ID
  status: number; // 状态（0-未下发/2-待反馈/3-待复核/4-待审核/5-已作废/1-已完成）
  statusName: string; // 状态名称
  reviewRejectReson?: string; // 审核拒绝原因
  approveRejectReson?: string; // 审批拒绝原因
  deptUserId?: number; // 部门负责人ID
  deptUserName?: string; // 部门负责人姓名
  deptUserLink?: string; // 部门负责人联系方式
  reviewUserId?: number; // 审核人ID
  reviewUserName?: string; // 审核人姓名
  createdAt: string;
  updatedAt: string;
  isDeleted: number;
  scores?: EvaluationScoreItem[]; // 评分详情
  scoreRank?: number; // 排名
}

/**
 * 查询考核对象列表请求参数（queryParam）
 */
export interface QuerySecurityExamineIssueQueryParam {
  psemId?: number; // 考核表ID（从路由参数获取）
  planStartTime?: string; // 计划开始时间
  planEndTime?: string; // 计划结束时间
  status?: number; // 状态（0-未下发/2-待反馈/3-待复核/4-待审核/5-已作废/1-已完成）
  deptName?: string; // 部门名称（考核对象）
}

/**
 * 查询考核对象列表请求参数
 */
export interface QuerySecurityExamineIssueParams {
  pageNumber: number; // 页号
  pageSize: number; // 每页数量
  queryParam: QuerySecurityExamineIssueQueryParam; // 查询参数
}

/**
 * 查询考核对象列表
 */
export function querySecurityExamineIssue(params: QuerySecurityExamineIssueParams) {
  return http.request<QueryPageResponse<EvaluationTargetItem>>({
    url: '/securityExamine/admin/querySecurityExamineIssue',
    method: 'post',
    data: params,
  });
}

/**
 * 作废安全考核表
 */
export function updateSecurityExamineRepeal(id: number) {
  return http.request({
    url: `/securityExamine/admin/updateSecurityExamineRepeal?id=${id}`,
    method: 'put',
  });
}

/**
 * 作废考核对象
 */
export function updateSecurityExamineIssueRepeal(id: number) {
  return http.request({
    url: `/securityExamine/admin/updateSecurityExamineIssueRepeal?id=${id}`,
    method: 'put',
  });
}

/**
 * 删除考核对象
 */
export function deleteSecurityExamineIssue(id: number) {
  return http.request({
    url: `/securityExamine/admin/deleteSecurityExamineIssue?id=${id}`,
    method: 'delete',
  });
}

/**
 * 查询部门考核列表请求参数（queryParam）
 */
export interface QuerySecurityExamineDeptQueryParam {
  exName?: string; // 考核表名称
  status?: number; // 状态
  deptName?: string; // 部门名称
  planStartTime?: string; // 计划开始时间
  planEndTime?: string; // 计划结束时间
}

/**
 * 查询部门考核列表请求参数
 */
export interface QuerySecurityExamineDeptParams {
  pageNumber: number; // 页号
  pageSize: number; // 每页数量
  queryParam: QuerySecurityExamineDeptQueryParam; // 查询参数
}

/**
 * 查询部门考核列表
 */
export function querySecurityExamineDept(params: QuerySecurityExamineDeptParams) {
  return http.request<QueryPageResponse<EvaluationTargetItem>>({
    url: '/securityExamine/dept/querySecurityExamineDept',
    method: 'post',
    data: params,
  });
}

/**
 * 查询部门考核详情
 */
export function querySecurityExamineIssueDeptDetail(id: number) {
  return http.request<EvaluationTargetItem>({
    url: `/securityExamine/dept/querySecurityExamineIssueDeptDetail?id=${id}`,
    method: 'get',
  });
}

/**
 * 查询管理员端考核对象详情（用于评分）
 */
export function querySecurityExamineIssueDetail(id: number) {
  return http.request<EvaluationTargetItem>({
    url: `/securityExamine/admin/querySecurityExamineIssueDetail?id=${id}`,
    method: 'get',
  }); 
}

/**
 * 提交部门考核反馈请求参数
 */
export interface UpdateSecurityExamineDeptSubmitParams {
  id: number; // 考核表ID (psemId)
  scores: Array<{
    id?: number; // 评分项ID
    selfScore: number; // 自评得分
  }>;
}

/**
 * 提交部门考核反馈
 */
export function updateSecurityExamineDeptSubmit(params: UpdateSecurityExamineDeptSubmitParams) {
  return http.request({
    url: '/securityExamine/dept/updateSecurityExamineDeptSubmit',
    method: 'put',
    data: params,
  });
}

/**
 * 导出部门考核详情
 */
export function exportSecurityExamineIssueDeptDetail(id: number) {
  return http.request({
    url: '/securityExamine/dept/exportSecurityExamineIssueDeptDetail',
    method: 'post',
    data: { id },
    responseType: 'blob',
  });
}

/**
 * 导入部门考核详情
 */
export function importSecurityExamineIssueDeptDetail(params: { id: number; file: File }) {
  const formData = new FormData();
  formData.append('id', String(params.id));
  formData.append('file', params.file);
  return http.request({
    url: '/securityExamine/dept/importSecurityExamineIssueDeptDetail',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  });
}

/**
 * 管理员端复核提交
 */
export function updateSecurityExamineIssueReviewSubmit(params: UpdateSecurityExamineDeptSubmitParams) {
  return http.request({
    url: '/securityExamine/admin/updateSecurityExamineIssueReviewSubmit',
    method: 'put',
    data: params,
  });
}

/**
 * 管理员端复核通过（提交）
 */
export function updateSecurityExamineIssueReviewAgree(params: UpdateSecurityExamineDeptSubmitParams) {
  return http.request({
    url: '/securityExamine/admin/updateSecurityExamineIssueReviewAgree',
    method: 'put',
    data: params,
  });
}

/**
 * 管理员端复核不通过
 */
export function updateSecurityExamineIssueReviewDisagree(data: { id: number; reviewRejectReson?: string }) {
  return http.request({
    url: '/securityExamine/admin/updateSecurityExamineIssueReviewDisagree',
    method: 'put',
    data,
  });
}

/**
 * 管理员端审核通过
 */
export function updateSecurityExamineIssueApproveAgree(id: number) {
  return http.request({
    url: `/securityExamine/admin/updateSecurityExamineIssueApproveAgree?id=${id}`,
    method: 'put',
  });
}

/**
 * 管理员端审核不通过
 */
export function updateSecurityExamineIssueApproveDisagree(data: { id: number; approveRejectReson?: string; psemId?: number }) {
  return http.request({
    url: '/securityExamine/admin/updateSecurityExamineIssueApproveDisagree',
    method: 'put',
    data,
  });
}

/**
 * 查询先进集体
 */
export interface QuerySecurityExamineIssueAdvancedParams extends QueryPageRequest<any> {
  queryParam: {
    psemId?: number;
    deptName?: string;
    planStartTime?: string;
    planEndTime?: string;
  };
}

export function querySecurityExamineIssueAdvanced(params: QuerySecurityExamineIssueAdvancedParams) {
  return http.request<QueryPageResponse<EvaluationTargetItem>>({
    url: '/securityExamine/admin/querySecurityExamineIssueAdvanced',
    method: 'post',
    data: params,
  });
}

/**
 * 部门端先进个人查询请求参数（queryParam）
 */
export interface QuerySecurityExamineDeptAdvancedUserQueryParam {
  psemId?: number; // 考核表ID
  userName?: string; // 员工工号/名称
  planStartTime?: string; // 计划开始时间
  planEndTime?: string; // 计划结束时间
}

/**
 * 部门端先进个人查询请求参数
 */
export interface QuerySecurityExamineDeptAdvancedUserParams {
  pageNumber: number; // 页号
  pageSize: number; // 每页数量
  queryParam: QuerySecurityExamineDeptAdvancedUserQueryParam; // 查询参数
}

/**
 * 部门端先进个人返回对象
 */
export interface EvaluationDeptAdvancedUserItem {
  id?: number; // 记录ID
  deptName: string; // 所属部门
  deptId?: number; // 部门ID
  deptUserId?: number; // 部门用户ID
  deptUserName: string; // 部门负责人
  deptUserLink: string; // 部门负责人联系方式
  advUserStaffNo: string; // 员工工号
  advUserName: string; // 先进个人姓名
  advUserLink: string; // 先进个人联系方式（员工联系方式）
  remark: string; // 先进个人描述
  attachments: string; // 附件
  planEndTime: string; // 上报日期（计划结束时间）
}

/**
 * 查询部门端先进个人列表
 */
export function querySecurityExamineDeptAdvancedUser(params: QuerySecurityExamineDeptAdvancedUserParams) {
  return http.request<QueryPageResponse<EvaluationDeptAdvancedUserItem>>({
    url: '/securityExamine/dept/querySecurityExamineDeptAdvancedUser',
    method: 'post',
    data: params,
  });
}

/**
 * 管理员端先进个人查询请求参数（queryParam）
 */
export interface QuerySecurityExamineIssueAdvancedUserQueryParam {
  psemId?: number; // 考核表ID
  deptName?: string; // 部门名称
  userName?: string; // 员工工号/名称
  planStartTime?: string; // 计划开始时间
  planEndTime?: string; // 计划结束时间
}

/**
 * 管理员端先进个人查询请求参数
 */
export interface QuerySecurityExamineIssueAdvancedUserParams {
  pageNumber: number; // 页号
  pageSize: number; // 每页数量
  queryParam: QuerySecurityExamineIssueAdvancedUserQueryParam; // 查询参数
}

/**
 * 查询管理员端先进个人列表
 */
export function querySecurityExamineIssueAdvancedUser(params: QuerySecurityExamineIssueAdvancedUserParams) {
  return http.request<QueryPageResponse<EvaluationDeptAdvancedUserItem>>({
    url: '/securityExamine/admin/querySecurityExamineIssueAdvancedUser',
    method: 'post',
    data: params,
  });
}

/**
 * 保存部门端先进个人请求参数
 */
export interface SaveSecurityExamineDeptAdvUserRequest {
  psemId: number; // 考核表ID
  users: Array<{
    deptId: number; // 部门ID
    advUserStaffNo: string; // 员工工号
    advUserName: string; // 先进个人姓名
    advUserLink: string; // 先进个人联系方式
    remark: string; // 先进个人描述
  }>;
}

/**
 * 保存部门端先进个人
 */
export function saveSecurityExamineDeptAdvUser(data: SaveSecurityExamineDeptAdvUserRequest) {
  return http.request({
    url: '/securityExamine/dept/saveSecurityExamineDeptAdvUser',
    method: 'post',
    data,
  });
}

/**
 * 管理员端保存先进个人请求参数
 */
export interface SaveSecurityExamineAdvUserAdminRequest {
  psemId: number; // 考核表ID（路由参数id）
  deptId: number; // 部门ID
  advUserStaffNo: string; // 员工工号
  advUserName: string; // 先进个人姓名
  advUserLink: string; // 先进个人联系方式
  remark: string; // 先进个人描述
}

/**
 * 管理员端保存先进个人
 */
export function saveSecurityExamineAdvUserAdmin(data: SaveSecurityExamineAdvUserAdminRequest) {
  return http.request({
    url: '/securityExamine/admin/saveSecurityExamineAdvUserAdmin',
    method: 'post',
    data,
  });
}

/**
 * 管理员端更新先进个人
 */
export interface UpdateSecurityExamineAdvUserAdminRequest extends EvaluationDeptAdvancedUserItem {
  psemId: number; // 考核表ID
}

export function updateSecurityExamineAdvUserAdmin(data: UpdateSecurityExamineAdvUserAdminRequest) {
  return http.request({
    url: '/securityExamine/admin/updateSecurityExamineAdvUserAdmin',
    method: 'post',
    data,
  });
}

/**
 * 查询部门端先进个人详情
 */
export function querySecurityExamineDeptAdvUserDetail(id: number) {
  return http.request<EvaluationDeptAdvancedUserItem>({
    url: `/securityExamine/dept/querySecurityExamineDeptAdvUser?id=${id}`,
    method: 'get',
  });
}

/**
 * 更新部门端先进个人请求参数
 */
export interface UpdateSecurityExamineDeptAdvUserRequest {
  id: number; // 记录ID
  psemId: number; // 考核表ID
  deptName: string; // 部门名称
  deptId: number; // 部门ID
  deptUserId: number; // 部门用户ID
  deptUserName: string; // 部门负责人姓名
  deptUserLink: string; // 部门负责人联系方式
  advUserStaffNo: string; // 员工工号
  advUserName: string; // 先进个人姓名
  advUserLink: string; // 先进个人联系方式
  remark: string; // 先进个人描述
}

/**
 * 更新部门端先进个人
 */
export function updateSecurityExamineDeptAdvUser(data: UpdateSecurityExamineDeptAdvUserRequest) {
  return http.request({
    url: '/securityExamine/dept/updateSecurityExamineDeptAdvUser',
    method: 'put',
    data,
  });
}

/**
 * 管理员端查询先进个人详情
 */
export function querySecurityExamineAdvUser(id: number) {
  return http.request<EvaluationDeptAdvancedUserItem>({
    url: `/securityExamine/admin/querySecurityExamineAdvUser?id=${id}`,
    method: 'get',
  });
}

/**
 * 删除部门端先进个人
 */
export function deleteSecurityExamineDeptAdvUser(id: number) {
  return http.request({
    url: `/securityExamine/dept/deleteSecurityExamineDeptAdvUser?id=${id}`,
    method: 'delete',
  });
}
