/**
 * 文件职责：配送设置模块 API 与 DTO 定义。
 * 1. 维护配送模式、梯度、区域、通用设置类型。
 * 2. 提供查询/保存/复制配送设置接口。
 */
import { requestClient } from '#/api/request';

/** 配送模式 */
export type DeliveryMode = 'polygon' | 'radius';

/** 半径梯度配置 */
export interface RadiusTierDto {
  color: string;
  deliveryFee: number;
  etaMinutes: number;
  id: string;
  maxDistance: number;
  minDistance: number;
  minOrderAmount: number;
}

/** 多边形区域配置 */
export interface PolygonZoneDto {
  color: string;
  deliveryFee: number;
  etaMinutes: number;
  id: string;
  minOrderAmount: number;
  name: string;
  polygonGeoJson: string;
  priority: number;
}

/** 通用配送配置 */
export interface DeliveryGeneralSettingsDto {
  /** 配送时间加成（分钟） */
  etaAdjustmentMinutes: number;
  /** 免配送费门槛（元），空值表示不启用 */
  freeDeliveryThreshold: null | number;
  /** 每小时配送上限（单） */
  hourlyCapacityLimit: number;
  /** 最大配送距离（公里） */
  maxDeliveryDistance: number;
}

/** 门店配送设置聚合 */
export interface StoreDeliverySettingsDto {
  generalSettings: DeliveryGeneralSettingsDto | null;
  isConfigured: boolean;
  mode: DeliveryMode | null;
  /** 半径配送中心点纬度 */
  radiusCenterLatitude: null | number;
  /** 半径配送中心点经度 */
  radiusCenterLongitude: null | number;
  polygonZones: PolygonZoneDto[];
  radiusTiers: RadiusTierDto[];
  storeId: string;
}

/** 保存配送设置参数 */
export interface SaveStoreDeliverySettingsParams {
  generalSettings: DeliveryGeneralSettingsDto;
  mode: DeliveryMode;
  /** 半径配送中心点纬度 */
  radiusCenterLatitude: null | number;
  /** 半径配送中心点经度 */
  radiusCenterLongitude: null | number;
  polygonZones: PolygonZoneDto[];
  radiusTiers: RadiusTierDto[];
  storeId: string;
}

/** 复制配送设置参数 */
export interface CopyStoreDeliverySettingsParams {
  sourceStoreId: string;
  targetStoreIds: string[];
}

/** 地址地理编码结果 */
export interface StoreDeliveryGeocodeDto {
  address: string;
  latitude: null | number;
  longitude: null | number;
}

/** 获取门店配送设置 */
export async function getStoreDeliverySettingsApi(storeId: string) {
  return requestClient.get<StoreDeliverySettingsDto>('/store/delivery', {
    params: { storeId },
  });
}

/** 保存门店配送设置 */
export async function saveStoreDeliverySettingsApi(
  data: SaveStoreDeliverySettingsParams,
) {
  return requestClient.post('/store/delivery/save', data);
}

/** 复制配送设置到其他门店 */
export async function copyStoreDeliverySettingsApi(
  data: CopyStoreDeliverySettingsParams,
) {
  return requestClient.post('/store/delivery/copy', data);
}

/** 地址地理编码（后端签名代理） */
export async function geocodeStoreDeliveryAddressApi(address: string) {
  return requestClient.get<StoreDeliveryGeocodeDto>('/store/delivery/geocode', {
    params: { address },
  });
}
