import request from '@/config/axios'
import type { Dayjs } from 'dayjs'

/** 财务发票主信息 */
export interface Invoice {
  id: number // 主键ID
  invoiceDate?: string | Dayjs // 发票日期
  invoiceCategory?: string // 发票类别（进项发票/销项发票）
  invoiceType?: string // 发票类型（增值税专用发票/普通发票）
  invoiceNo?: string // 发票号码（唯一）
  counterpartyName?: string // 客户/供应商名称
  amountWithoutTax?: number // 金额（不含税）
  taxRate?: number // 税率（%）
  taxAmount?: number // 税额
  totalAmount?: number // 价税合计
  attachment: string // 发票附件
  invoiceStatus?: string // 发票状态（待接收/已认证/已作废等）
  isSettlement?: number // 结算状态（0/1）
  certificationDate: string | Dayjs // 认证日期（仅进项票）
  voucherNo: string // 凭证字号
  accountingPeriod?: string // 记账期间（如2026-01）
  remark: string // 备注
}

// 财务发票主 API
export const InvoiceApi = {
  // 查询财务发票主分页
  getInvoicePage: async (params: any) => {
    return await request.get({ url: `/finance/invoice/page`, params })
  },

  // 查询财务发票主详情
  getInvoice: async (id: number) => {
    return await request.get({ url: `/finance/invoice/get?id=` + id })
  },

  // 新增财务发票主
  createInvoice: async (data: Invoice) => {
    return await request.post({ url: `/finance/invoice/create`, data })
  },

  // 修改财务发票主
  updateInvoice: async (data: Invoice) => {
    return await request.put({ url: `/finance/invoice/update`, data })
  },

  // 结算财务发票主
  settlementInvoice: async (data: Pick<Invoice, 'id'>) => {
    return await request.put({ url: `/finance/invoice/settlement`, data })
  },

  // 删除财务发票主
  deleteInvoice: async (id: number) => {
    return await request.delete({ url: `/finance/invoice/delete?id=` + id })
  },

  /** 批量删除财务发票主 */
  deleteInvoiceList: async (ids: number[]) => {
    return await request.delete({ url: `/finance/invoice/delete-list?ids=${ids.join(',')}` })
  },

  // 导出财务发票主 Excel
  exportInvoice: async (params) => {
    return await request.download({ url: `/finance/invoice/export-excel`, params })
  },

  // 查询发票号码列表
  getInvoiceNoList: async (invoiceCategory: number | string) => {
    return await request.get({ url: `/finance/invoice/getInvoiceNoList`, params: { invoiceCategory } })
  }
}
