import { ResPage, StoreUser } from "@/api/interface/index";
import { PORT_NONE } from "@/api/config/servicePort";
import http from "@/api";
import http_store from "@/api/indexStore";
import http_ai from "@/api/indexAi";
import axios from "axios";
import { ResultEnum } from "@/enums/httpEnum";
import { useUserStore } from "@/stores/modules/user";
import { ElMessage } from "element-plus";
import { LOGIN_URL } from "@/config";
import router from "@/routers";

// 创建专门用于 STORE API 的 axios 实例（单例）
const storeAxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_API_URL_STORE as string,
  timeout: ResultEnum.TIMEOUT as number,
  withCredentials: true
});

// 添加请求拦截器
storeAxiosInstance.interceptors.request.use(
  (config: any) => {
    const userStore = useUserStore();
    if (config.headers) {
      config.headers.Authorization = userStore.token;
    }
    return config;
  },
  (error: any) => {
    return Promise.reject(error);
  }
);

// 添加响应拦截器
storeAxiosInstance.interceptors.response.use(
  (response: any) => {
    const { data } = response;
    const userStore = useUserStore();

    // 登录失效
    if (data.code == ResultEnum.OVERDUE) {
      userStore.setToken("");
      router.replace(LOGIN_URL);
      ElMessage.error(data.msg);
      return Promise.reject(data);
    }
    // 全局错误信息拦截
    if (data.code && data.code !== ResultEnum.SUCCESS) {
      ElMessage.error(data.msg);
      return Promise.reject(data);
    }
    return data;
  },
  async (error: any) => {
    const { response } = error;
    // 请求超时 && 网络错误单独判断
    if (error.message.indexOf("timeout") !== -1) ElMessage.error("请求超时！请您稍后重试");
    if (error.message.indexOf("Network Error") !== -1) ElMessage.error("网络错误！请您稍后重试");
    // 根据服务器响应的错误状态码，做不同的处理
    if (response?.data?.message) {
      ElMessage.error(response.data.message);
    }
    return Promise.reject(error);
  }
);

/** 门店优惠券列表查询参数（与 alienStore GET 查询串一致） */
export type GetStoreAllCouponListParams = {
  storeId: number | string;
  tab?: number;
  size?: number;
  page?: number;
  couponName?: string;
  couponsFromType?: number;
  couponType?: number | string;
};

/**
 * 获取门店全部优惠券列表
 * GET {VITE_API_URL_STORE}/alienStore/life-discount-coupon/getStoreAllCouponList
 * 示例：?storeId=381&tab=0&size=99&page=1&couponName=&couponsFromType=1&couponType=1
 * 兼容旧入参：pageNum/pageSize、name（映射为 page/size/couponName）
 */
export const getCouponList = (input: Record<string, any>) => {
  const params: GetStoreAllCouponListParams = {
    storeId: input.storeId,
    tab: input.tab ?? 0,
    size: Number(input.size ?? input.pageSize ?? 99),
    page: Number(input.page ?? input.pageNum ?? 1),
    couponName: input.couponName ?? input.name ?? "",
    couponsFromType: Number(input.couponsFromType ?? 1),
    couponType: input.couponType != null && input.couponType !== "" ? Number(input.couponType) : 1
  };
  return storeAxiosInstance.get<ResPage<any>>(`/life-discount-coupon/getStoreAllCouponList`, {
    params
  });
};

/**
 * 获取优惠券模板列表
 * @param params 请求参数
 * @returns 优惠券模板列表数据
 */
export const getCouponTemplateList = params => {
  return http.post<ResPage<any>>(PORT_NONE + `/discountCouponPlatform/getCouponTemplateList`, params);
};

/**
 * 获取运营活动列表（分页查询）
 * @param params { activityName?: string, activityStatus?: string, pageNum?: string, pageSize?: string, status?: number, storeId?: string, storeName?: string }
 * @returns 运营活动列表数据
 */
export const getActivityList = (params: {
  activityName?: string; // 活动名称（模糊查询）
  activityStatus?: string; // 活动状态
  activityType?: number; // 活动类型（1-营销活动，2-评论有礼）
  pageNum?: string; // 当前页
  pageSize?: string; // 每页数量
  status?: number; // 状态（1-待审核, 2-未开始, 3-审核拒绝, 4-已售罄, 5-进行中, 6-已下架, 7-已结束, 8-审核成功）
  storeId?: string; // 商户ID
  storeName?: string; // 商户名称（模糊查询）
}) => {
  return storeAxiosInstance.get<ResPage<any>>(PORT_NONE + `/operationalActivity/detail`, { params });
};

/**
 * 获取运营活动详情
 * @param params 请求参数
 * @returns 运营活动详情数据
 */
export const getActivityDetail = params => {
  return http.get<any>(PORT_NONE + `/operationalActivity/queryActivityById`, params);
};

/**
 * 新增运营活动
 * @param params 请求参数
 * @returns 新增结果
 */
export const addActivity = params => {
  return http.post<any>(PORT_NONE + `/operationalActivity/create`, params);
};

/**
 * 更新运营活动
 * @param params 请求参数
 * @returns 更新结果
 */
export const updateActivity = params => {
  return http.post<any>(PORT_NONE + `/operationalActivity/update`, params);
};

/**
 * 删除运营活动
 * @param params 请求参数
 * @returns 删除结果
 */
export const deleteActivity = params => {
  return http.get<any>(PORT_NONE + `/operationalActivity/delete`, params);
};

/**
 * 更新运营活动状态
 * @param params 请求参数
 * @returns 更新结果
 */
export const updateActivityStatus = params => {
  return http.get<any>(PORT_NONE + `/operationalActivity/updateStatus`, params);
};

/**
 * 获取活动规则级联选择器选项
 * @param params 请求参数
 * @returns 级联选择器选项数据
 */
export const getActivityRuleOptions = (params?: any) => {
  return storeAxiosInstance.get<any>(PORT_NONE + `/userActionRewardRule/getRewardRuleList`, params);
};

/**
 * AI生成活动宣传图（与商家端 operationalActivity/generatePromotionImages 一致）
 * @param params { activityName: string, uploadImgType: number }
 * @returns 生成的图片数据
 */
export const generatePromotionImages = (params: { activityName: string; uploadImgType?: number }) => {
  return http.post<any>(PORT_NONE + `/operationalActivity/generatePromotionImages`, params);
};

/**
 * AI生成活动宣传图（原 http_ai 接口，保留兼容）
 * @param params 请求参数 { text: string } - 活动描述文本
 * @returns 生成的图片数据
 */
export const generatePromotionImage = (params: { text: string }) => {
  return http_ai.post<any>(`/ai/life-manager/api/v1/promotion_image/generate`, params);
};

/**
 * 活动案例列表（使用 VITE_API_URL_STORE）
 * @param params { uploadStatus?: number, activityName?: string, pageNum?: number, pageSize?: number }
 * @returns 活动案例列表
 */
export const getPersonCaseList = (params: {
  storeId: number;
  hasResult?: number; // 上传情况：0-未上传，1-已上传（非必填）
  activityName?: string; // 所属活动/活动名称（非必填）
  pageNum?: number; // 当前页（非必填）
  pageSize?: number; // 每页条数（非必填）
}) => {
  // 此接口需要使用 VITE_API_URL_STORE，使用专门的 axios 实例
  return storeAxiosInstance.post<ResPage<any>>(PORT_NONE + `/storeOperationalActivity/achievement/case/store/list`, params);
};

/**
 * 查询报名人员列表
 * @param params { storeId: number, status?: number, activityName?: string, pageNum?: number, pageSize?: number }
 * @returns 报名人员列表
 */
export const getPersonnelList = (params: {
  storeId: number; // 商户ID（必填）
  status?: number; // 报名状态: 0-待审核, 1-拒绝, 2-通过（非必填）
  activityName?: string; // 活动名称(模糊查询)（非必填）
  pageNum?: number; // 页码,默认值:1（非必填）
  pageSize?: number; // 每页大小,默认值:10（非必填）
}) => {
  return http.post<ResPage<any>>(PORT_NONE + `/operationalActivitySignup/queryList`, params);
};

/**
 * 查询案例详情
 * @param params { activityId: number, userId: number } - 活动ID（必填），用户ID（必填）
 * @returns 案例详情信息
 */
export const getPersonCaseDetail = (params: { activityId: number; userId: number }) => {
  return storeAxiosInstance.get<any>(PORT_NONE + `/storeOperationalActivity/achievement/case/detail`, { params });
};

/**
 * 查询报名人员详情
 * @param params { id: number } - 报名ID（必填）
 * @returns 报名人员详情信息
 */
export const getPersonnelDetail = (params: { id: number }) => {
  return http.post<any>(PORT_NONE + `/operationalActivitySignup/queryById`, params);
};

/**
 * 审核通过报名人员
 * @param params { id: number } - 报名ID（必填）
 * @returns 审核结果
 */
export const approvePersonnel = (params: { id: number }) => {
  return http.post<any>(PORT_NONE + `/operationalActivitySignup/approve`, params);
};

/**
 * 审核拒绝报名人员
 * @param params { id: number, rejectReason?: string } - 报名ID（必填），拒绝原因（非必填）
 * @returns 审核结果
 */
export const rejectPersonnel = (params: { id: number; rejectReason?: string }) => {
  return http.post<any>(PORT_NONE + `/operationalActivitySignup/reject`, params);
};

/**
 * 上传活动结果
 * @param params
 * @returns
 */
export const uploadActivityResult = (params: {
  id: number; // 活动ID（必填）
  resultType: number; // 结果类型：0-文字，1-图片（必填）
  resultText?: string; // 结果文字，当resultType=0时使用（非必填）
  resultMediaUrl?: string; // 结果图片地址，当resultType=1时使用（非必填）
}) => {
  return http.post<any>(PORT_NONE + `/operationalActivity/uploadResult`, params);
};
