import request from '@/utils/request'
import type { ApiResult } from '@/api/auth'

// ==================== 个人资料主表相关 ====================

/** 保存/更新个人资料主表 — 请求参数 */
export interface SaveProfileParams {
  /** 真实姓名 */
  name?: string
  /** 邮箱 */
  email?: string
  /** 手机号码 */
  mobileNumber?: string
  /** 身份证号 */
  idCard?: string
  /** 所在城市编码 */
  regionCode?: string
  /** 微信号 */
  wechatNumber?: string
  /** 作品集链接 */
  portfolioUrl?: string
  /** 工作年限 */
  workYears?: number
  /** 拥有经验的行业ID列表 */
  experienceIndustryIds?: number[]
  /** 技能标签列表 */
  skills?: string[]
  /** 证书标签列表 */
  certificates?: string[]
}

/**
 * 保存/更新个人资料主表信息
 * POST /user/profile
 * Cookie 自动携带身份信息，无需额外传 userId
 */
export function saveProfile(data: SaveProfileParams) {
  return request.post<any, ApiResult>('/user/profile', data)
}

/** 获取个人资料主表 — 返回数据结构 */
export interface ProfileData {
  /** 主键 ID */
  id?: number
  /** 真实姓名 */
  name?: string
  /** 邮箱 */
  email?: string
  /** 手机号码 */
  mobileNumber?: string
  /** 身份证号 */
  idCard?: string
  /** 所在城市编码 */
  regionCode?: string
  /** 微信号 */
  wechatNumber?: string
  /** 作品集链接 */
  portfolioUrl?: string
  /** 工作年限 */
  workYears?: number
  /** 拥有经验的行业ID列表 */
  experienceIndustryIds?: number[]
  /** 技能标签列表 */
  skills?: string[]
  /** 证书标签列表 */
  certificates?: string[]
}

/**
 * 获取个人资料主表信息
 * GET /user/profile
 * Cookie 自动携带身份信息，无需额外传参
 */
export function fetchProfile() {
  return request.get<any, ApiResult<ProfileData>>('/user/profile')
}

/**
 * 根据简历ID同步更新个人资料
 * POST /user/profile/syncFromResume?resumeId=xxx
 * Cookie 自动携带 Token
 */
export function syncProfileFromResume(resumeId: string) {
  return request.post<any, ApiResult>('/user/profile/syncFromResume', null, {
    params: { resumeId },
  })
}

// ==================== 教育经历相关 ====================

/** 描述段落 */
export interface DescriptionParagraph {
  /** 段落标识，前端生成的短ID */
  id?: string
  /** 段落文本内容 */
  text: string
}

/** 教育经历 — 查询返回数据结构 */
export interface EducationItem {
  /** 主键 ID */
  id?: number
  /** 学校名称 */
  school?: string
  /** 专业 */
  major?: string
  /** 学历 1=大专 2=本科 3=硕士 4=博士 */
  degree?: number
  /** 学习形式 0=全日制 1=非全日制 */
  studyType?: number
  /** 入学时间，格式：YYYY-MM */
  startDate?: string
  /** 毕业时间，格式：YYYY-MM */
  endDate?: string
  /** 描述段落 */
  description?: DescriptionParagraph[]
}

/** 教育经历 — 保存请求参数（单条） */
export interface SaveEducationItem {
  /** 学校名称 */
  school: string
  /** 专业 */
  major?: string
  /** 学历 1=大专 2=本科 3=硕士 4=博士 */
  degree: number
  /** 学习形式 0=全日制 1=非全日制 */
  studyType?: number
  /** 入学时间，格式：YYYY-MM */
  startDate?: string
  /** 毕业时间，格式：YYYY-MM */
  endDate?: string
  /** 描述段落 */
  description?: DescriptionParagraph[]
}

/**
 * 获取教育经历列表
 * GET /user/profile/education
 * Cookie 自动携带身份信息，无需额外传参
 */
export function fetchEducation() {
  return request.get<any, ApiResult<EducationItem[]>>('/user/profile/education')
}

/**
 * 保存教育经历（全量覆盖）
 * POST /user/profile/education
 * Body: SaveEducationItem[]
 */
export function saveEducation(data: SaveEducationItem[]) {
  return request.post<any, ApiResult>('/user/profile/education', data)
}

// ==================== 工作经历相关 ====================

/** 工作经历 — 查询返回数据结构 */
export interface WorkItem {
  /** 主键 ID */
  id?: number
  /** 公司名称 */
  companyName?: string
  /** 职位 */
  position?: string
  /** 开始时间 */
  startDate?: string
  /** 结束时间 */
  endDate?: string
  /** 描述段落 */
  description?: DescriptionParagraph[]
}

/** 工作经历 — 保存请求参数（单条） */
export interface SaveWorkItem {
  /** 公司名称 */
  companyName: string
  /** 职位 */
  position: string
  /** 开始时间，格式：2023.06 */
  startDate: string
  /** 结束时间，格式：2023.09，至今则为空 */
  endDate?: string
  /** 描述段落 */
  description?: DescriptionParagraph[]
}

/**
 * 获取工作经历列表
 * GET /user/profile/work
 */
export function fetchWork() {
  return request.get<any, ApiResult<WorkItem[]>>('/user/profile/work')
}

/**
 * 保存工作经历（全量覆盖）
 * POST /user/profile/work
 * Body: SaveWorkItem[]
 */
export function saveWork(data: SaveWorkItem[]) {
  return request.post<any, ApiResult>('/user/profile/work', data)
}

// ==================== 实习经历相关 ====================
// 实习经历字段与工作经历一致，复用 WorkItem / SaveWorkItem 类型

/**
 * 获取实习经历列表
 * GET /user/profile/internship
 */
export function fetchInternship() {
  return request.get<any, ApiResult<WorkItem[]>>('/user/profile/internship')
}

/**
 * 保存实习经历（全量覆盖）
 * POST /user/profile/internship
 * Body: SaveWorkItem[]
 */
export function saveInternship(data: SaveWorkItem[]) {
  return request.post<any, ApiResult>('/user/profile/internship', data)
}

// ==================== 项目经历相关 ====================

/** 项目经历 — 查询返回数据结构 */
export interface ProjectItem {
  /** 主键 ID */
  id?: number
  /** 所属公司 */
  companyName?: string
  /** 项目名称 */
  projectName?: string
  /** 担任角色 */
  role?: string
  /** 开始时间 */
  startDate?: string
  /** 结束时间 */
  endDate?: string
  /** 描述段落 */
  description?: DescriptionParagraph[]
}

/** 项目经历 — 保存请求参数（单条） */
export interface SaveProjectItem {
  /** 所属公司 */
  companyName?: string
  /** 项目名称 */
  projectName: string
  /** 担任角色 */
  role?: string
  /** 开始时间，格式：2023.06 */
  startDate: string
  /** 结束时间，格式：2023.09，至今则为空 */
  endDate?: string
  /** 描述段落 */
  description?: DescriptionParagraph[]
}

/**
 * 获取项目经历列表
 * GET /user/profile/project
 */
export function fetchProject() {
  return request.get<any, ApiResult<ProjectItem[]>>('/user/profile/project')
}

/**
 * 保存项目经历（全量覆盖）
 * POST /user/profile/project
 * Body: SaveProjectItem[]
 */
export function saveProject(data: SaveProjectItem[]) {
  return request.post<any, ApiResult>('/user/profile/project', data)
}

// ==================== 竞赛经历相关 ====================

/** 竞赛经历 — 查询返回数据结构 */
export interface CompetitionItem {
  /** 主键 ID */
  id?: number
  /** 竞赛名称 */
  competitionName?: string
  /** 获奖情况 */
  award?: string
  /** 获奖时间 */
  awardDate?: string
  /** 描述段落 */
  description?: DescriptionParagraph[]
}

/** 竞赛经历 — 保存请求参数（单条） */
export interface SaveCompetitionItem {
  /** 竞赛名称 */
  competitionName: string
  /** 获奖情况，如全国二等奖 */
  award?: string
  /** 获奖时间，格式：2023.07 */
  awardDate?: string
  /** 描述段落 */
  description?: DescriptionParagraph[]
}

/**
 * 获取竞赛经历列表
 * GET /user/profile/competition
 */
export function fetchCompetition() {
  return request.get<any, ApiResult<CompetitionItem[]>>('/user/profile/competition')
}

/**
 * 保存竞赛经历（全量覆盖）
 * POST /user/profile/competition
 * Body: SaveCompetitionItem[]
 */
export function saveCompetition(data: SaveCompetitionItem[]) {
  return request.post<any, ApiResult>('/user/profile/competition', data)
}
