import { request } from "@umijs/max";
import type { Prod } from ".";

/**
 * ProdServiceVO
 */
export interface ProdServiceVO {
  /**
   * 是否特殊日期（节假日周末什么的）0关1开
   */
  additionalFeeSwitch?: number;
  /**
   * 是否特殊时段0关1开
   */
  additionalSwitch?: number;
  /**
   * 分类名称
   */
  categoryName?: string;
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 新建人
   */
  creator?: string;
  /**
   * 是否紧急响应服务0关1开
   */
  emergencySwitch?: number;
  /**
   * 是否接单上线0关1开
   */
  orderLimitSwitch?: number;
  /**
   * 特殊时段规则配置
   */
  prodAdditionalFeeDatesList?: ProdAdditionalFeeDatesDO[];
  /**
   * 特殊日期规则配置
   */
  prodAdditionalFeePeriodsList?: ProdAdditionalFeePeriodsDO[];
  /**
   * 急响应服务配置
   */
  prodEmergencyInfoVO?: ProdEmergencyInfoVO;
  /**
   * 产品ID
   */
  prodId?: number;
  /**
   * 预约配置
   */
  prodReservationConfig?: ProdReservationInfoVO;
  /**
   * 服务区域配置
   */
  prodServiceAreasInfo?: ProdServiceAreasInfoVO;
  /**
   * 接单上线配置
   */
  productOrderLimitVO?: ProductOrderLimitDO;
  /**
   * 体重配置
   */
  prodWeightConfig?: ProdWeightRangePricesSaveInfoVO;
  /**
   * 是否开启服务区域配置0关1开
   */
  regionSwitch?: number;
  /**
   * 是否预约0关1开
   */
  reservationSwitch?: number;
  /**
   * 修改人
   */
  updater?: string;
  /**
   * 修改时间
   */
  updateTime?: string;
  /**
   * 是否开启体重配置0关1开
   */
  weightSwitch?: number;
}

/**
 * 特殊日期附加费用规则 DO
 *
 * ProdAdditionalFeeDatesDO
 */
export interface ProdAdditionalFeeDatesDO {
  /**
   * 收费方式
   */
  chargeMode?: number;
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 创建者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  creator?: string;
  /**
   * 自定义日期时间段（JSON格式存储）
   */
  customTimeSlots?: string[];
  /**
   * 日期类型0：'自定义日期范围':1：'指定日期':2：'法定节假日',3：'固定休息日'
   */
  dateType?: number;
  /**
   * 是否删除
   */
  deleted?: number;
  /**
   * 特殊日期规则的唯一标识符
   */
  id?: number;
  /**
   * 是否启用该规则
   */
  isEnabled?: number;
  /**
   * 名称
   */
  name?: string;
  /**
   * 价格或上浮百分比
   */
  price?: number;
  /**
   * 商品id
   */
  prodId?: number;
  /**
   * 类型：1：特殊日期 2：可预约时段黑名单日期 3：紧急相应服务黑名单日期
   */
  type?: number;
  /**
   * 更新者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  updater?: string;
  /**
   * 最后更新时间
   */
  updateTime?: string;
}

/**
 * 特殊时段附加费用规则 DO
 *
 * ProdAdditionalFeePeriodsDO
 */
export interface ProdAdditionalFeePeriodsDO {
  /**
   * 收费方式0:'固定金额',1:'基准价上浮'
   */
  chargeMode?: number;
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 创建者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  creator?: string;
  /**
   * 是否删除
   */
  deleted?: number;
  /**
   * 浮动百分比
   */
  floatingPercentage?: number;
  /**
   * 特殊时段规则的唯一标识符
   */
  id?: number;
  /**
   * 名称
   */
  name?: string;
  /**
   * 价格或上浮百分比
   */
  price?: number;
  /**
   * 商品ID
   */
  prodId?: number;
  /**
   * 特殊时段设置（JSON格式存储）
   */
  specialTimeSlots?: string[];
  /**
   * 更新者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  updater?: string;
  /**
   * 最后更新时间
   */
  updateTime?: string;
}

/**
 * 急响应服务配置
 *
 * ProdEmergencyInfoVO
 */
export interface ProdEmergencyInfoVO {
  /**
   * 紧急响应服务配置的唯一标识符
   */
  id?: number;
  /**
   * 紧急响应黑名单日期设置
   */
  prodEmergencyResponseBlackList?: ProdAdditionalFeeBlackVO[];
  /**
   * 紧急响应时间区间设置
   */
  prodEmergencyResponseIntervalsList?: ProdEmergencyResponseIntervalsDO[];
  /**
   * 关联的商品ID
   */
  prodId?: number;
  /**
   * 可响应时间段（JSON格式存储）
   */
  responseTimeSlots?: string[];
}

/**
 *
 * com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeBlackVO
 *
 * ProdAdditionalFeeBlackVO
 */
export interface ProdAdditionalFeeBlackVO {
  /**
   * 黑名单日期设置
   */
  customTimeSlots?: string[];
  /**
   * 日期类型0：'自定义日期范围':1：'指定日期':2：'法定节假日',3：'固定休息日'
   */
  dateType?: number;
  /**
   * 特殊日期规则的唯一标识符
   */
  id?: number;
  /**
   * 是否启用该规则是否启用该规则0关1开
   */
  isEnabled?: number;
  /**
   * 类型：1：特殊日期 2：可预约时段黑名单日期 3：紧急相应服务黑名单日期
   */
  type?: number;
}

/**
 * 紧急响应时间区间设置 DO
 *
 * ProdEmergencyResponseIntervalsDO
 */
export interface ProdEmergencyResponseIntervalsDO {
  /**
   * 收费模式0：固定收费 1：浮动收费
   */
  chargeMode?: number;
  /**
   * 关联的紧急响应服务配置ID
   */
  configId?: number;
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 创建者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  creator?: string;
  /**
   * 是否删除
   */
  deleted?: number;
  /**
   * 浮动百分比
   */
  floatingPercentage?: number;
  /**
   * 响应时间区间的唯一标识符
   */
  id?: number;
  /**
   * 响应模式名称
   */
  modeName?: string;
  name?: string;
  /**
   * 价格或上浮百分比
   */
  price?: number;
  /**
   * 商品ID
   */
  prodId?: number;
  /**
   * 响应时间（小时）
   */
  responseHours?: number;
  /**
   * 更新者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  updater?: string;
  /**
   * 最后更新时间
   */
  updateTime?: string;
}

/**
 * 预约配置
 *
 * ProdReservationInfoVO
 */
export interface ProdReservationInfoVO {
  /**
   * 需提前多少小时预约
   */
  advanceHours?: number;
  /**
   * 是否允许更改预约时间 1可以 0不可以
   */
  allowChange?: number;
  /**
   * 更改预约时间的时间规则（如服务开始前1小时可更改）
   */
  changeTimeRule?: number;
  /**
   * 预约配置的唯一标识符
   */
  id?: number;
  /**
   * 允许更改预约时间的最大次数
   */
  maxChangeTimes?: number;
  /**
   * 关联的商品ID
   */
  prodId?: number;
  /**
   * 预约黑名单日期设置
   */
  prodReservationBlackList?: ProdAdditionalFeeBlackVO[];
  /**
   * 预约日期范围 7天 10天 15天 30天
   */
  reservationDateRange?: number;
  /**
   * 预约时段设置
   */
  reservationTimeSlots?: string[];
  /**
   * 预约时间区间设置
   */
  timeBook?: TimeBookVO;
  /**
   * 时间段
   */
  timeSlot?: number;
}

/**
 * 预约时间区间设置
 *
 * TimeBookVO
 */
export interface TimeBookVO {
  /**
   * 预约时段设置
   */
  reservationTimeSlots?: string[];
  /**
   * 时间段
   */
  timeSlot?: number;
}

/**
 * 服务区域配置
 *
 * ProdServiceAreasInfoVO
 */
export interface ProdServiceAreasInfoVO {
  /**
   * 服务区域地址名称
   */
  areaNameList?: string[];
  /**
   * 超区费用（仅在rule_type为accept_with_fee时有效）
   */
  fee?: number;
  /**
   * 超区规则的唯一标识符
   */
  id?: number;
  /**
   * 关联的商品ID
   */
  prodId?: number;
  /**
   * 超区规则类型（0:拒单、2:接单并收取超区费、3:接单并免超区费）
   */
  ruleType?: number;
  [property: string]: any;
}

/**
 * 体重配置
 *
 * ProdWeightRangePricesSaveInfoVO
 */
export interface ProdWeightRangePricesSaveInfoVO {
  /**
   * 体重是否收费0否1是
   */
  isWeightCharge?: number;
  /**
   * 体重配置
   */
  prodWeightConfigList?: ProdWeightRangePricesDO[];
}

/**
 * 体重区间价格 DO
 *
 * ProdWeightRangePricesDO
 */
export interface ProdWeightRangePricesDO {
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 创建者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  creator?: string;
  /**
   * 是否删除
   */
  deleted?: number;
  /**
   * 体重区间价格的唯一标识符
   */
  id?: number;
  /**
   * 是否启用该规则0否1是
   */
  isEnabled?: number;
  /**
   * 价格
   */
  price?: number;
  /**
   * 关联的体重配置ID
   */
  prodId?: number;
  /**
   * 更新者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  updater?: string;
  /**
   * 最后更新时间
   */
  updateTime?: string;
  /**
   * 体重区间
   */
  weightRange?: string;
}

/**
 * 接单上线配置
 *
 * ProductOrderLimitDO
 */
export interface ProductOrderLimitDO {
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 创建者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  creator?: string;
  /**
   * 是否删除
   */
  deleted?: number;
  /**
   * 接单上限配置的唯一标识符
   */
  id?: number;
  /**
   * 限制单位'0:按自然天',1:'按自然周',2:'按自然月'
   */
  limitUnit?: number;
  /**
   * 上限阈值
   */
  maxOrders?: number;
  /**
   * 关联的商品ID
   */
  prodId?: number;
  /**
   * 更新者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  updater?: string;
  /**
   * 最后更新时间
   */
  updateTime?: string;
}

export const getProdServiceRule = async (params: Prod) => {
  return request("/product/prod/getProdService", {
    method: "GET",
    params,
  });
};

export const uptateProdServiceRule = async (data: ProdServiceVO) => {
  return request("/product/prod/uptateProdService", {
    method: "POST",
    data,
  });
};
