import { httpGet, httpPost, httpPut } from '../../utils/http'
import { Schedule } from '../models/schedule'
import {
  Category,
  Content,
  DictType,
  MaterialDealer,
  MaterialDealerDetail,
  MaterialDealerHomePage,
  MaterialDealerRes,
  Moment,
  Comment,
  Activity,
  BannerMode,
  Banner,
  StudyTour,
} from '../models/moment'
import dayjs from 'dayjs'

export const getUserInfo = () =>
  httpGetMock<any>({
    avatar: 'https://via.placeholder.com/21x21',
    nickname: '苏小萌',
  })
export const getSchedule = () =>
  httpGetMock<Schedule>({
    name: '东京艺术设计研习营',
    cover: 'https://via.placeholder.com/375x297',
    items: [
      {
        title: '早稻田大学课程',
        time: '9:00',
        content:
          '是位于日本东京都新宿区的一所著名的私立大学。它由早稻田大学的创始人大隈重信于1882年创立,是日本超级国际化大学计划(Top Global University Project)选定的大学之一,也是日本顶尖的高等教育机构之一。',
        momentExample: 'https://via.placeholder.com/285x157',
        monentHint: '*说明:打卡地XX,收集上课素材',
      },
      {
        title: '早稻田大学博物馆参观',
        time: '11:00',
        content:
          '早稻田大学拥有多座博物馆,‌其中最著名的是早稻田大学历史馆。‌早稻田大学历史馆收藏、‌展示着著名校友在运动方面的杰出表现和成就,‌馆内的解说牌以日语和英语标示,‌展现了传统样式风格的建筑。',
        momentExample: 'https://via.placeholder.com/285x157',
        monentHint: '*说明:打卡地XX,收集上课素材',
      },
    ],
  })
export const getMoment = () =>
  httpGetMock<Moment>({
    author: {
      avatar: 'https://via.placeholder.com/35x35',
      nickname: '苏小萌',
      level: '0',
    },
    content: '用心做好设计,为客户创造美好家居环境',
    images: [
      'https://via.placeholder.com/165x220',
      'https://via.placeholder.com/220x220',
      'https://via.placeholder.com/165x220',
    ],
    tags: ['意大利游学设计班'],
    shares: 0,
    comments: 0,
    likes: 0,
    createdAt: dayjs('2024-07-15').toDate(),
    commentList: [],
  })
export const getClassmates = () =>
  httpGetMock<any[]>([
    {
      avatar: 'https://via.placeholder.com/35x35',
      nickname: '苏小萌',
      level: '0',
    },
    {
      avatar: 'https://via.placeholder.com/35x35',
      nickname: '苏小萌',
      level: '0',
    },
    {
      avatar: 'https://via.placeholder.com/35x35',
    },
  ])
export const getClassmate = () =>
  httpGetMock<any>({
    title: '2023同学荟|清华空间环境艺术设计研修班 阔步向未来',
    author: {
      avatar: 'https://via.placeholder.com/35x35',
      nickname: '苏小萌',
      level: '0',
    },
    viewNum: 125,
    createdAt: dayjs('2024-07-15').toDate(),
    content: '<div>111111</div>',
  })
export const getMaterialDealers = () =>
  httpGetMock<any[]>([
    {
      name: 'IMOLA瓷砖',
      icon: 'https://via.placeholder.com/78x78',
      brandType: '进口品牌',
      type: '瓷砖',
      views: 1000,
      createdAt: dayjs('2024-07-15').toDate(),
    },
    {
      name: 'IMOLA瓷砖',
      icon: 'https://via.placeholder.com/78x78',
      brandType: '进口品牌',
      type: '瓷砖',
      views: 1000,
      createdAt: dayjs('2024-07-15').toDate(),
    },
  ])
export const weixinMiniAppLogin = (phoneCode: string, loginCode: string, state: string) =>
  httpPost<any>('/app-api/member/auth/weixin-mini-app-login', {
    phoneCode,
    loginCode,
    state,
  })
export const getMemberUserInfo = () => httpGet<any>('/app-api/member/user/get')
export const updateMemberUserInfo = (data = {}) => httpPut<any>('/app-api/member/user/update', data)
export const getByDictType = (
  type: string | 'member_channel_source' | 'member_spatial_expertise_type' | DictType,
) =>
  httpGet<
    {
      label: string
      value: string
      dictType: string
      status: number
    }[]
  >('/app-api/system/dict-data/type', { type })
export const validateReferrerCode = (data: { code: string }) =>
  httpPost('/app-api/member/user-auth-info/referrer-validate-code', {}, data)
export const createUserAuthInfo = (
  data: Partial<{
    id: number
    userId: number
    designerName: string
    gender: number
    mobile: string
    channelSource: number
    referrer: string
    employer: string
    spatialExpertiseType: number
    attachment: string
    auditStatus: number
    remark: string
  }>,
) => httpPost<any>('/app-api/member/user-auth-info/create', data)
export const getCircles = (query: { tagName?: string; circleType?: string; stylistId?: string }) =>
  httpGet<{
    list: {
      id: number
      headUrl?: string
      stylistId?: number
      stylistName?: string
      marketing?: string
      circleDesc?: string
      tagName?: string
      detailsType?: string
      detailsUrl?: string
      detailsDesc?: string
      circleType?: string
      spaceType?: string
      designStyle?: string
      spaceAddr?: string
      customerDemand?: string
      createTime: number
      bannerUrls: string[]
      shareCount?: number
      upvoteCount?: number
      ownUpvote: boolean
      reviewCount: number
    }[]
  }>('/app-api/member/circle/page', query)
export const createCircle = (data: Partial<Circle>) =>
  httpPost<any>('/app-api/member/circle/create', data)
export const getCircle = (id: string) =>
  httpGet<Partial<CircleRes>>('/app-api/member/circle/get', { id })
export const shareCircle = (id: string) => httpGet('/app-api/member/circle/share', { id })
export const getCircleUpvotes = (id) =>
  httpGet<{
    total: number
    list: {
      id: number
      circleId: number
      userId: number
      upvpteTime: number
      createTime: number
      userName: string
    }[]
  }>('/app-api/member/circle-upvote/page', { circleId: id })
export const createCircleUpvote = (data: { circleId: number; userId: number; userName: string }) =>
  httpPost('/app-api/member/circle-upvote/create', data)
/**
 * 取消圈子点赞
 */
export const cancelCircleUpvote = (query: { id: string }) =>
  httpGet('/app-api/member/circle-upvote/delete', query)
export const createCircleReview = (
  data: Partial<{
    circleId: string
    userId: string | number
    userName: string
    reviewContent: string
    replayReviewId: string
  }>,
) => httpPost<any>('/app-api/member/circle-review/create', data)
export const deleteCircleReview = (id) => httpGet('/app-api/member/circle-review/delete', { id })
export const getCircleReviews = (query: { circleId: string }) =>
  httpGet<{
    list: Comment[]
  }>('/app-api/member/circle-review/getCircleReviewByCircleId', query)
export const createCircleReviewUpvote = (data: {
  circleId: number
  userId: number
  userName: string
  reviewId: number
}) => httpPost('/app-api/member/circle-review-upvote/create', data)
export const cancelCircleReviewUpvote = (query: {
  circleId: string
  userId: string
  reviewId: string
}) => httpGet('/app-api/member/circle-review-upvote/cancel', query)
export const getCircleReviewUpvotes = (query: { circleId: string; reviewId?: string }) =>
  httpGet('/app-api/member/circle-review-upvote/page', query)
export const getReviewReplay = (query: { id: string }) =>
  httpGet('/app-api/member/circle-review/getReviewReplay', query)
export const getTasks = (query) =>
  httpGet<{
    list: {
      id: number
      taskKey: string
      taskValue: string
      createTime: string
      sort: number
      status: number
    }[]
  }>('/app-api/basicsetting/set-task-center/page', query)
export const getCircleTags = (query) =>
  httpGet<{
    list: {
      id: number
      labelName: string
      labelType: number
      usageCount: number
      creator: string
      createTime: number
    }[]
  }>('/app-api/basicsetting/set-label/page', query)
export const getSetIndexConfigs = (query = {}) =>
  httpGet<{
    list: {
      id: number
      name: string
      indexPromotionalVideoImage: string
      coverVideoImage: string
      sort: number
      playCount: number
      status: number
      createTime: string
    }[]
  }>('/app-api/basicsetting/set-index-config/page', query)

/**
 * 获取材料商列表
 * @param query {{brandLevel: '1'|'2'}}
 * @returns {Promise<*>}
 */
export const getMaterials = (query = {}) =>
  httpGet<{
    list: MaterialDealer[]
  }>('/app-api/member/materials/page', query)
export const getAppMaterials = () =>
  httpGet<MaterialDealerRes[]>('/app-api/member/materials/appMaterialsList')
export const getAppMaterial = (id: number) =>
  httpGet<MaterialDealerDetail>('/app-api/member/materials/queryHomePage', { materialsId: id })
export const getMaterialHomePage = (id: number) =>
  httpGet<Partial<MaterialDealerHomePage>>('/app-api/member/materials/queryHomePage', {
    materialsId: id,
  })
export const getMaterialDetail = (query: { id: string }) =>
  httpGet<MaterialDealerDetail>('/app-api/member/materials/getDetail', query)
export const createMaterialsReferrer = (data) =>
  httpPost('/app-api/member/materials-referrer/create', data)
export const getContents = (query: {
  contentType?: '1' | '2' | '3'
  contentCategory?: string
  pageSize?: string
}) => httpGet<{ list: Content[] }>('/app-api/member/content-manger/page', query)
export const getAllCategories = () =>
  httpGet<Category[]>('/app-api/member/categories/getAllCategories')
export const getContent = (query: { id: string }) =>
  httpGet<Content>('/app-api/member/content-manger/get', query)
export const getProductCategories = () =>
  httpGet<Category[]>('/app-api/member/product-type/getAllProductCategories', {})
export const getProducts = (query: { oneCategory?: string; secondCategory?: string }) =>
  httpPost<{
    list: {
      prodcutName: string
      productId: string
      needPoints: number
      points: number
      productPrice: string
      productCoverImgUrl: string
      productDetailsImgUrl: string
      contentDesc: string
      productType: string
      oneCategory: any
      secondCategory: string
    }[]
  }>('/app-api/member/product/page', {}, query)
export const getProduct = (id: string) =>
  httpGet<{
    id: number
    prodcutName: string
    productId: string
    oneCategory: any
    oneCategoryName: any
    secondCategory: string
    secondCategoryName: any
    isRestrict: number
    productRepertory: any
    productPrice: string
    productType: number
    vendorId: any
    vendorName: string
    needPoints: number
    points: number
    gainType: number
    exchangeDesc: string
    productCoverImgUrl: string
    productDetailsImgUrl: string
    contentDesc: string
    status: number
    exchangeCount: any
    memberLevelId: any
    memberLevelName: any
    favourablePoints: any
    favourableEndDate: any
    createTime: number
    updateTime: number
  }>('/app-api/member/product/detail', { productId: id })
export const getProductItemBuy = (query: { userId: number }) =>
  httpPost<{
    list: {
      productId: string
      prodcutName: string
      oneCategory: any
      secondCategory: string
      isRestrict: number
      productRepertory: any
      productPrice: string
      productType: string
      vendorId: any
      vendorName: string
      needPoints: number
      points?: number
      gainType: number
      exchangeDesc: any
      productCoverImgUrl: string
      productDetailsImgUrl: string
      contentDesc: string
      status: number
      exchangeCount: any
      memberLevelId: any
      memberLevelName: any
      favourablePoints?: number
      favourableEndDate?: number
      favourableStatus: number
      count: number
      createTime: any
    }[]
    total: number
  }>('/app-api/member/product-item-buy/select', query)
/**
 * 商品添加到购物车
 */
export const createProductItemBuy = (data: {
  doList: {
    createTime?: string
    updateTime?: string
    creator?: string
    updater?: string
    deleted?: boolean
    id?: number
    productId?: string
    userId?: number
  }[]
}) => httpPost('/app-api/member/product-item-buy/create', data)
/**
 * 从购物车删除商品
 */
export const deleteProductItemBuy = (data: {
  doList: {
    createTime?: string
    updateTime?: string
    creator?: string
    updater?: string
    deleted?: boolean
    id?: number
    productId?: string
    userId?: number
  }[]
}) => httpPost('/app-api/member/product-item-buy/delete', data)
/**
 * 商城下单
 */
export const productPlacing = (data: {
  isShoppingCart: number
  userId: number
  list: {
    orderNo?: string
    productId?: string
    points?: number
    nums?: number
  }[]
  couponList: {
    couponId: number
    brandPoints: number
  }[]
  totalsPoints?: number
  totalsCouponPoints?: number
  totalsCurrPoints?: number
}) => httpPost('/app-api/member/points-order/placing', data)
/**
 * 订单结算
 */
export const orderPay = (data: {
  isShoppingCart: number
  userId: number
  list: {
    orderNo?: string
    productId?: string
    points?: number
    nums?: number
  }[]
  couponList: {
    couponId: number
    brandPoints: number
  }[]
  totalsPoints?: number
  totalsCouponPoints?: number
  totalsCurrPoints?: number
}) => httpPost(`/app-api/member/points-order/placingPay`, data)
export const getPointsOrders = (query) =>
  httpGet<{ list: []; total: number }>('/app-api/member/points-order/page', query)
export const getActivities = (query) =>
  httpGet<{
    list: Activity[]
  }>('/app-api/member/activity/page', query)
export const getActivity = (id: string) =>
  httpGet<Partial<Activity>>('/app-api/member/activity/get', { id })
export const activitySignup = (data: { id: number }) =>
  httpPost('/app-api/member/activity/signup', data)
/**
 * 获取活动报名列表
 */
export const getActivitySignups = (query: { activityId: string }) =>
  httpGet<{
    list: {
      id: number
      activityId: number
      userId: number
      applyTime: number
      applyType: number
      applyStatus: number
      applyPoints: any
      isJoin: string
      createTime: number
      name: string
      headImgUrl: string
      mobile: string
      brokerId: any
      brokerName: string
      memberLevelId: number
      memberLevelName: any
    }[]
    total: number
  }>('/app-api/member/activity/signup/page', query)
/**
 * 获取游学列表
 */
export const getStudyTours = (query) =>
  httpGet<{ list: StudyTour[]; total: number }>('/app-api/member/app-study-abroad/page', query)
/**
 * 获取游学详情
 */
export const getStudyTour = (id: string) =>
  httpGet<StudyTour>('/app-api/member/app-study-abroad/get', { id })
/**
 * 游学报名
 */
export const studyTourSignup = (data: { id: number }) =>
  httpPost('/app-api/member/app-study-abroad/signup', data)
/**
 * 获取游学报名列表
 */
export const getStudyTourSignups = (query: { studyId: string }) =>
  httpGet<{
    list: {
      id: number
      activityId: number
      userId: number
      applyTime: number
      applyType: number
      applyStatus: number
      applyPoints: any
      isJoin: string
      createTime: number
      name: string
      headImgUrl: string
      mobile: string
      brokerId: any
      brokerName: string
      memberLevelId: number
      memberLevelName: any
    }[]
    total: number
  }>('/app-api/member/app-study-abroad/signup/page', query)
/**
 * 获取Banner列表
 */
export const getBanners = (query: { mode: BannerMode }) =>
  httpGet<Banner[]>('/app-api/member/banner/get-by-mode', query)
/**
 * 获取消息列表
 */
export const getMessages = (query) => httpGet('/app-api/member/message-manage/page', query)
/**
 * 获取Banner
 */
export const getBanner = (id) => httpGet<Banner>('/app-api/member/banner/get-by-id', { id })
/**
 * 获取积分明细列表
 */
export const getPoints = (query) =>
  httpGet<{
    list: {
      id: number
      pointsType: string
      typeName: string
      pointsCategory: string
      categoryName: string
      sourceId: number
      name: string
      pointsStauts: string
      points: number
      orderMoney: string
      materialsId: number
      materialsBrand: string
      stylistId: number
      brokerId: number
      stylistName: string
      brokerName: string
      generateTime: string
      verifyTime: string
      completeTime: string
      turnDownTime: string
      cancelTime: string
      cancelReason: string
      turnDownReason: string
      remark: string
      couponId: number
      orderNo: string
      createTime: string
    }[]
    total: number
  }>(`/app-api/member/points-details/pageAllByYear/${query.year}`, query)
export const refreshToken = (refreshToken: string) =>
  httpPost<any>('/app-api/member/auth/refresh-token', {}, { refreshToken })
export const httpGetMock = <T>(data: T) =>
  new Promise<IResData<T>>((resolve) => resolve({ code: 1, msg: '', data } as IResData<T>))
export interface Circle {
  headUrl: string
  stylistId: string | number
  stylistName: string
  marketing: string
  circleDesc: string
  tagName: string
  detailsType: string
  detailsUrl: string
  detailsDesc: string
  circleType: string
  spaceType: string
  designStyle: string
  spaceAddr: string
  customerDemand: string
  bannerUrls: string[]
}
export interface CircleRes {
  id: number
  headUrl?: string
  stylistId?: number
  stylistName?: string
  marketing?: string
  circleDesc?: string
  tagName?: string
  detailsType?: string
  detailsUrl?: string
  detailsDesc?: string
  circleType?: string
  spaceType?: string
  designStyle?: string
  spaceAddr?: string
  customerDemand?: string
  createTime: number
  bannerUrls: string[]
  shareCount?: number
  upvoteCount?: number
  ownUpvote: boolean
  reviewCount: number
}