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

// ==================== 校招公告列表接口 ====================

/** Instant 时间结构（Java Instant 序列化格式） */
export interface InstantTime {
  /** 从 1970-01-01T00:00:00Z 起的秒数 */
  seconds: number
  /** 纳秒偏移（0 ~ 999999999） */
  nanos?: number
}

/** 校招公告列表请求参数 */
export interface AnnouncementListParams {
  /** 当前页码，从1开始 */
  pageNum?: number
  /** 每页条数 */
  pageSize?: number
  /** 关键字 */
  keyword?: string
  /** 发布时间起（不含） */
  publishTimeStart?: InstantTime | null
  /** 发布时间止（含） */
  publishTimeEnd?: InstantTime | null
  /** 投递截止时间起（不含） */
  applyEndTimeStart?: InstantTime | null
  /** 投递截止时间止（含） */
  applyEndTimeEnd?: InstantTime | null
  /** 公司类型列表 */
  companyTypes?: string[]
  /** 学历要求列表 */
  educationNames?: string[]
  /** 招聘届数列表 */
  recruitYears?: number[]
  /** 批次列表 */
  batchNames?: string[]
  /** 岗位大类列表 */
  categoryNames?: string[]
  /** 热招城市列表 */
  cityNames?: string[]
  /** 行业列表 */
  industryNames?: string[]
  /** 标签列表 */
  tagNames?: string[]
}

/** 校招公告列表项 */
export interface AnnouncementItem {
  /** 公告ID */
  id: number
  /** 公司ID */
  companyId: number
  /** 公司名称 */
  companyName: string
  /** 公司logo */
  logoUrl: string
  /** 公告标题 */
  title: string
  /** 专业要求 */
  majorRequire: string
  /** 发布时间（毫秒时间戳） */
  publishTime: number | null
  /** 投递结束时间 */
  applyEndTime: InstantTime | null
  /** 投递截止描述 */
  applyEndDesc: string
  /** 行业列表 */
  industryNames: string[]
  /** 岗位大类列表 */
  categoryNames: string[]
  /** 热招城市列表 */
  cityNames: string[]
  /** 学历要求列表 */
  educationNames: string[]
  /** 招聘届数列表 */
  recruitYears: number[]
  /** 批次列表 */
  batchNames: string[]
}

/** 校招公告分页数据 */
export interface AnnouncementPageData {
  /** 当前页码 */
  pageNum: number
  /** 每页条数 */
  pageSize: number
  /** 总记录数 */
  total: number
  /** 数据列表 */
  list: AnnouncementItem[]
}

/** 校招公告统计数据 */
export interface AnnouncementStatistics {
  /** 今日新增公告数 */
  dayCount: number
  /** 本月新增公告数 */
  monthCount: number
  /** 累计公告数 */
  totalCount: number
}

/**
 * 获取公告最新更新时间
 * GET /public/recruitAnnouncement/lastUpdateTime
 * 返回毫秒时间戳（如 1786387561000）
 */
export function fetchAnnouncementLastUpdateTime() {
  return request.get<any, ApiResult<number>>('/public/recruitAnnouncement/lastUpdateTime')
}

/**
 * 获取公告毕业年份标签列表
 * GET /public/recruitAnnouncement/year
 * 返回年份数组，如 [2021, 2022, ..., 2029]
 */
export function fetchAnnouncementRecruitYearTags() {
  return request.get<any, ApiResult<number[]>>('/public/recruitAnnouncement/year')
}

/**
 * 获取公告学历筛选选项
 * GET /public/recruitAnnouncement/education
 * 返回学历字符串数组，如 ["专科","中专","博士","大专","本科","硕士","高中"]
 */
export function fetchAnnouncementEducationOptions() {
  return request.get<any, ApiResult<string[]>>('/public/recruitAnnouncement/education')
}

/**
 * 获取公告招聘批次筛选选项
 * GET /public/recruitAnnouncement/batch
 * 返回批次字符串数组
 */
export function fetchAnnouncementBatchOptions() {
  return request.get<any, ApiResult<string[]>>('/public/recruitAnnouncement/batch')
}

/**
 * 获取校招公告统计数据
 * GET /public/recruitAnnouncement/statistics
 */
export function fetchAnnouncementStatistics() {
  return request.get<any, ApiResult<AnnouncementStatistics>>('/public/recruitAnnouncement/statistics')
}

/**
 * 获取校招公告分页列表
 * POST /public/recruitAnnouncement/page
 */
export function fetchAnnouncementList(params: AnnouncementListParams = {}) {
  return request.post<any, ApiResult<AnnouncementPageData>>('/public/recruitAnnouncement/page', {
    pageNum: params.pageNum ?? 1,
    pageSize: params.pageSize ?? 10,
    ...params,
  })
}

// ==================== 校招公告详情接口 ====================

/** 校招公告详情数据 */
export interface AnnouncementDetail {
  /** 公告ID */
  id: number
  /** 公司ID */
  companyId: number
  /** 公司名称 */
  companyName: string
  /** 公司logo */
  logoUrl: string
  /** 公司类型 */
  companyType: string
  /** 公告标题 */
  title: string
  /** 公司简介 */
  companyIntro: string
  /** 公司规模 */
  companyScale: string
  /** 面向对象 */
  targetAudience: string
  /** 专业要求 */
  majorRequire: string
  /** 招聘岗位 */
  recruitPosition: string
  /** 备注 */
  remark: string
  /** 是否笔试 */
  writtenExam: string
  /** 投递开始时间 */
  applyStartTime: InstantTime | null
  /** 投递结束时间 */
  applyEndTime: InstantTime | null
  /** 投递截止描述 */
  applyEndDesc: string
  /** 专属内推码 */
  inviteCode: string
  /** 信息来源说明 */
  source: string
  /** 公告地址 */
  announcementUrl: string
  /** 投递地址 */
  applyUrl: string
  /** 发布时间 */
  publishTime: InstantTime | null
  /** 清洗状态 */
  cleanStatus: number
  /** 状态 */
  status: number
  /** 创建时间 */
  createTime: InstantTime | null
  /** 更新时间 */
  updateTime: InstantTime | null
  /** 行业列表 */
  industryNames: string[]
  /** 岗位大类列表 */
  categoryNames: string[]
  /** 热招城市列表 */
  cityNames: string[]
  /** 学历要求列表 */
  educationNames: string[]
  /** 招聘届数列表 */
  recruitYears: number[]
  /** 批次列表 */
  batchNames: string[]
  /** 标签列表 */
  tagNames: string[]
}

/**
 * 获取校招公告详情
 * GET /public/recruitAnnouncement/detail
 */
export function fetchAnnouncementDetail(id: string) {
  return request.get<any, ApiResult<AnnouncementDetail>>('/public/recruitAnnouncement/detail', {
    params: { id },
  })
}


// ==================== 校招公告推荐列表接口 ====================

/** 校招公告推荐请求参数 */
export interface AnnouncementRecommendParams {
  /** 当前页码，从1开始 */
  pageNum?: number
  /** 每页条数 */
  pageSize?: number
  /** 关键字 */
  keyword?: string
  /** 公告ID（必传，字符串避免精度丢失） */
  announcementId: string
}

/** 校招公告推荐列表项 */
export interface AnnouncementRecommendItem {
  /** 公告ID */
  id: number
  /** 公司名称 */
  companyName: string
  /** 公司logo */
  logoUrl: string
  /** 岗位大类列表 */
  categoryNames: string[]
  /** 热招城市列表 */
  cityNames: string[]
}

/** 校招公告推荐分页数据 */
export interface AnnouncementRecommendPageData {
  /** 当前页码 */
  pageNum: number
  /** 每页条数 */
  pageSize: number
  /** 总记录数 */
  total: number
  /** 数据列表 */
  list: AnnouncementRecommendItem[]
}

/**
 * 获取校招公告推荐列表
 * POST /public/recruitAnnouncement/recommend
 */
export function fetchAnnouncementRecommend(params: AnnouncementRecommendParams) {
  return request.post<any, ApiResult<AnnouncementRecommendPageData>>('/public/recruitAnnouncement/recommend', {
    pageNum: params.pageNum ?? 1,
    pageSize: params.pageSize ?? 100,
    ...params,
  })
}
