import type { PageParam, PageResult } from '@vben/request';

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

export namespace MesPdBaseDataApi {
  /** 用电类型 */
  export interface ElectricityType {
    id?: number; // 编号
    code?: string; // 类型编码
    name?: string; // 类型名称
    description?: string; // 类型说明
    sort?: number; // 排序
    status?: number; // 启用状态（1启用/0禁用）
    createTime?: Date; // 创建时间
  }

  /** 电压等级 */
  export interface VoltageLevel {
    id?: number; // 编号
    code?: string; // 等级编码
    name?: string; // 等级名称
    voltageValue?: number; // 电压数值（kV）
    sort?: number; // 排序
    status?: number; // 启用状态（1启用/0禁用）
    createTime?: Date; // 创建时间
  }

  /** 服务套餐 */
  export interface ServicePackage {
    id?: number; // 编号
    code?: string; // 套餐编码
    name?: string; // 套餐名称
    description?: string; // 套餐说明
    price?: number; // 套餐价格
    effectiveDate?: Date; // 生效日期
    expireDate?: Date; // 失效日期
    status?: number; // 启用状态（1启用/0禁用）
    createTime?: Date; // 创建时间
  }

  /** 定价标准 */
  export interface PriceStandard {
    id?: number; // 编号
    objectType?: number; // 定价对象类型（1服务套餐/2电压等级/3用电类型）
    objectTypeName?: string; // 定价对象类型名称
    objectId?: number; // 定价对象ID
    objectName?: string; // 定价对象名称
    price?: number; // 价格
    unit?: string; // 计价单位
    effectiveDate?: Date; // 生效日期
    status?: number; // 启用状态（1启用/0禁用）
    createTime?: Date; // 创建时间
  }

  /** 优惠策略 */
  export interface DiscountPolicy {
    id?: number; // 编号
    name?: string; // 策略名称
    policyType?: number; // 策略类型（1折扣/2立减）
    policyTypeName?: string; // 策略类型名称
    policyValue?: number; // 策略值（折扣：0-1 比例；立减：金额）
    targetType?: number; // 适用对象类型（1服务套餐/2电压等级/3用电类型，可空=全局）
    targetId?: number; // 适用对象ID
    startDate?: Date; // 生效日期
    endDate?: Date; // 失效日期
    status?: number; // 启用状态（1启用/0禁用）
    createTime?: Date; // 创建时间
  }

  /** 阶梯电价 */
  export interface TieredPrice {
    id?: number; // 编号
    packageId?: number; // 服务套餐ID
    voltageLevelId?: number; // 电压等级ID
    startValue?: number; // 档位下限（含，kWh）
    endValue?: number; // 档位上限（不含，kWh，可空=上不封顶）
    pricePerUnit?: number; // 档位单价
    status?: number; // 启用状态（1启用/0禁用）
    createTime?: Date; // 创建时间
  }
}

// ==================== 用电类型 ====================

/** 查询用电类型分页 */
export function getElectricityTypePage(params: PageParam) {
  return requestClient.get<PageResult<MesPdBaseDataApi.ElectricityType>>(
    '/mes/pd/electricity-type/page',
    { params },
  );
}

/** 查询用电类型详情 */
export function getElectricityType(id: number) {
  return requestClient.get<MesPdBaseDataApi.ElectricityType>(
    `/mes/pd/electricity-type/get?id=${id}`,
  );
}

/** 查询用电类型列表 */
export function getElectricityTypeList() {
  return requestClient.get<MesPdBaseDataApi.ElectricityType[]>(
    '/mes/pd/electricity-type/list',
  );
}

/** 新增用电类型 */
export function createElectricityType(data: MesPdBaseDataApi.ElectricityType) {
  return requestClient.post('/mes/pd/electricity-type/create', data);
}

/** 修改用电类型 */
export function updateElectricityType(data: MesPdBaseDataApi.ElectricityType) {
  return requestClient.put('/mes/pd/electricity-type/update', data);
}

/** 删除用电类型 */
export function deleteElectricityType(id: number) {
  return requestClient.delete(`/mes/pd/electricity-type/delete?id=${id}`);
}

/** 导出用电类型 Excel */
export function exportElectricityType(params: any) {
  return requestClient.download('/mes/pd/electricity-type/export-excel', {
    params,
  });
}

// ==================== 电压等级 ====================

/** 查询电压等级分页 */
export function getVoltageLevelPage(params: PageParam) {
  return requestClient.get<PageResult<MesPdBaseDataApi.VoltageLevel>>(
    '/mes/pd/voltage-level/page',
    { params },
  );
}

/** 查询电压等级详情 */
export function getVoltageLevel(id: number) {
  return requestClient.get<MesPdBaseDataApi.VoltageLevel>(
    `/mes/pd/voltage-level/get?id=${id}`,
  );
}

/** 查询电压等级列表 */
export function getVoltageLevelList() {
  return requestClient.get<MesPdBaseDataApi.VoltageLevel[]>(
    '/mes/pd/voltage-level/list',
  );
}

/** 新增电压等级 */
export function createVoltageLevel(data: MesPdBaseDataApi.VoltageLevel) {
  return requestClient.post('/mes/pd/voltage-level/create', data);
}

/** 修改电压等级 */
export function updateVoltageLevel(data: MesPdBaseDataApi.VoltageLevel) {
  return requestClient.put('/mes/pd/voltage-level/update', data);
}

/** 删除电压等级 */
export function deleteVoltageLevel(id: number) {
  return requestClient.delete(`/mes/pd/voltage-level/delete?id=${id}`);
}

/** 导出电压等级 Excel */
export function exportVoltageLevel(params: any) {
  return requestClient.download('/mes/pd/voltage-level/export-excel', { params });
}

// ==================== 服务套餐 ====================

/** 查询服务套餐分页 */
export function getServicePackagePage(params: PageParam) {
  return requestClient.get<PageResult<MesPdBaseDataApi.ServicePackage>>(
    '/mes/pd/service-package/page',
    { params },
  );
}

/** 查询服务套餐详情 */
export function getServicePackage(id: number) {
  return requestClient.get<MesPdBaseDataApi.ServicePackage>(
    `/mes/pd/service-package/get?id=${id}`,
  );
}

/** 查询服务套餐列表 */
export function getServicePackageList() {
  return requestClient.get<MesPdBaseDataApi.ServicePackage[]>(
    '/mes/pd/service-package/list',
  );
}

/** 新增服务套餐 */
export function createServicePackage(data: MesPdBaseDataApi.ServicePackage) {
  return requestClient.post('/mes/pd/service-package/create', data);
}

/** 修改服务套餐 */
export function updateServicePackage(data: MesPdBaseDataApi.ServicePackage) {
  return requestClient.put('/mes/pd/service-package/update', data);
}

/** 删除服务套餐 */
export function deleteServicePackage(id: number) {
  return requestClient.delete(`/mes/pd/service-package/delete?id=${id}`);
}

/** 导出服务套餐 Excel */
export function exportServicePackage(params: any) {
  return requestClient.download('/mes/pd/service-package/export-excel', {
    params,
  });
}

// ==================== 定价标准 ====================

/** 查询定价标准分页 */
export function getPriceStandardPage(params: PageParam) {
  return requestClient.get<PageResult<MesPdBaseDataApi.PriceStandard>>(
    '/mes/pd/price-standard/page',
    { params },
  );
}

/** 查询定价标准详情 */
export function getPriceStandard(id: number) {
  return requestClient.get<MesPdBaseDataApi.PriceStandard>(
    `/mes/pd/price-standard/get?id=${id}`,
  );
}

/** 新增定价标准 */
export function createPriceStandard(data: MesPdBaseDataApi.PriceStandard) {
  return requestClient.post('/mes/pd/price-standard/create', data);
}

/** 修改定价标准 */
export function updatePriceStandard(data: MesPdBaseDataApi.PriceStandard) {
  return requestClient.put('/mes/pd/price-standard/update', data);
}

/** 删除定价标准 */
export function deletePriceStandard(id: number) {
  return requestClient.delete(`/mes/pd/price-standard/delete?id=${id}`);
}

/** 导出定价标准 Excel */
export function exportPriceStandard(params: any) {
  return requestClient.download('/mes/pd/price-standard/export-excel', { params });
}

// ==================== 优惠策略 ====================

/** 查询优惠策略分页 */
export function getDiscountPolicyPage(params: PageParam) {
  return requestClient.get<PageResult<MesPdBaseDataApi.DiscountPolicy>>(
    '/mes/pd/discount-policy/page',
    { params },
  );
}

/** 查询优惠策略详情 */
export function getDiscountPolicy(id: number) {
  return requestClient.get<MesPdBaseDataApi.DiscountPolicy>(
    `/mes/pd/discount-policy/get?id=${id}`,
  );
}

/** 新增优惠策略 */
export function createDiscountPolicy(data: MesPdBaseDataApi.DiscountPolicy) {
  return requestClient.post('/mes/pd/discount-policy/create', data);
}

/** 修改优惠策略 */
export function updateDiscountPolicy(data: MesPdBaseDataApi.DiscountPolicy) {
  return requestClient.put('/mes/pd/discount-policy/update', data);
}

/** 删除优惠策略 */
export function deleteDiscountPolicy(id: number) {
  return requestClient.delete(`/mes/pd/discount-policy/delete?id=${id}`);
}

/** 导出优惠策略 Excel */
export function exportDiscountPolicy(params: any) {
  return requestClient.download('/mes/pd/discount-policy/export-excel', {
    params,
  });
}

// ==================== 阶梯电价 ====================

/** 查询阶梯电价分页 */
export function getTieredPricePage(params: PageParam) {
  return requestClient.get<PageResult<MesPdBaseDataApi.TieredPrice>>(
    '/mes/pd/tiered-price/page',
    { params },
  );
}

/** 查询阶梯电价详情 */
export function getTieredPrice(id: number) {
  return requestClient.get<MesPdBaseDataApi.TieredPrice>(
    `/mes/pd/tiered-price/get?id=${id}`,
  );
}

/** 新增阶梯电价 */
export function createTieredPrice(data: MesPdBaseDataApi.TieredPrice) {
  return requestClient.post('/mes/pd/tiered-price/create', data);
}

/** 修改阶梯电价 */
export function updateTieredPrice(data: MesPdBaseDataApi.TieredPrice) {
  return requestClient.put('/mes/pd/tiered-price/update', data);
}

/** 删除阶梯电价 */
export function deleteTieredPrice(id: number) {
  return requestClient.delete(`/mes/pd/tiered-price/delete?id=${id}`);
}

/** 导出阶梯电价 Excel */
export function exportTieredPrice(params: any) {
  return requestClient.download('/mes/pd/tiered-price/export-excel', { params });
}
