import { 
 | 
  useLifeRechargeContext, 
 | 
  LifePayRateListOutput, 
 | 
  PhoneParValueOutput, 
 | 
  PhoneParValueResponse, 
 | 
  QueryLifePayOrderListInput, 
 | 
  LifeRechargeConstants, 
 | 
  ElectricParValueResponse, 
 | 
  ElectricSupportAreaResponse, 
 | 
  QueryUserAccountAllListInput, 
 | 
  UserAccountListOutput, 
 | 
  AddUpdateUserAccountInput, 
 | 
  GasParValueResponse, 
 | 
  ChannelRateOutput, 
 | 
} from '@life-payment/core-vue'; 
 | 
import { useQuery, useQueryClient } from '@tanstack/vue-query'; 
 | 
import { computed, MaybeRef, reactive, unref } from 'vue'; 
 | 
import { useInfiniteLoading } from './infiniteLoading'; 
 | 
import { OrderInputType } from '../constants'; 
 | 
import { convertOrderFrontStatus } from '../utils'; 
 | 
  
 | 
export function useGetRate() { 
 | 
  const { blLifeRecharge } = useLifeRechargeContext(); 
 | 
  
 | 
  const { data: lifePayRateList, isLoading } = useQuery({ 
 | 
    queryKey: ['blLifeRecharge/getRate'], 
 | 
    queryFn: async () => { 
 | 
      return await blLifeRecharge.services.getRate({ showLoading: false }); 
 | 
    }, 
 | 
    placeholderData: () => [] as LifePayRateListOutput[], 
 | 
  }); 
 | 
  
 | 
  const hasChannel = computed(() => !!blLifeRecharge.accountModel.channlesNum); 
 | 
  
 | 
  const { data: channelRate } = useQuery({ 
 | 
    queryKey: ['blLifeRecharge/getChannelRate', blLifeRecharge.accountModel.channlesNum], 
 | 
    queryFn: async () => { 
 | 
      return await blLifeRecharge.services.getChannelRate( 
 | 
        { 
 | 
          checkChannelId: blLifeRecharge.accountModel.channlesNum, 
 | 
        }, 
 | 
        { showLoading: false } 
 | 
      ); 
 | 
    }, 
 | 
    placeholderData: () => ({} as ChannelRateOutput), 
 | 
    enabled: hasChannel, 
 | 
  }); 
 | 
  
 | 
  const lifePayPhoneRate = computed(() => { 
 | 
    if (hasChannel.value && channelRate.value.channlesRate) { 
 | 
      return channelRate.value.channlesRate; 
 | 
    } 
 | 
    return ( 
 | 
      lifePayRateList.value.find( 
 | 
        (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.默认话费折扣 
 | 
      )?.rate ?? 0 
 | 
    ); 
 | 
  }); 
 | 
  
 | 
  const lifePayElectricRate = computed(() => { 
 | 
    if (hasChannel.value && channelRate.value.channlesRate) { 
 | 
      return channelRate.value.channlesRate; 
 | 
    } 
 | 
    return ( 
 | 
      lifePayRateList.value.find( 
 | 
        (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.默认电费折扣 
 | 
      )?.rate ?? 0 
 | 
    ); 
 | 
  }); 
 | 
  
 | 
  const lifePayGasRate = computed(() => { 
 | 
    if (hasChannel.value && channelRate.value.channlesRate) { 
 | 
      return channelRate.value.channlesRate; 
 | 
    } 
 | 
    return ( 
 | 
      lifePayRateList.value.find( 
 | 
        (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.默认燃气折扣 
 | 
      )?.rate ?? 0 
 | 
    ); 
 | 
  }); 
 | 
  
 | 
  return { 
 | 
    lifePayRateList, 
 | 
    lifePayPhoneRate, 
 | 
    lifePayElectricRate, 
 | 
    lifePayGasRate, 
 | 
  }; 
 | 
} 
 | 
  
 | 
export function useGetPhoneParValue() { 
 | 
  const { blLifeRecharge } = useLifeRechargeContext(); 
 | 
  
 | 
  const { data: phoneParValueList, isLoading } = useQuery({ 
 | 
    queryKey: ['blLifeRecharge/getPhoneParValue'], 
 | 
    queryFn: async () => { 
 | 
      return await blLifeRecharge.services.getPhoneParValue({}, { showLoading: false }); 
 | 
    }, 
 | 
    select(data) { 
 | 
      return data?.phoneParValue ?? []; 
 | 
    }, 
 | 
    placeholderData: () => ({} as PhoneParValueResponse), 
 | 
  }); 
 | 
  
 | 
  return { 
 | 
    phoneParValueList, 
 | 
  }; 
 | 
} 
 | 
  
 | 
export function useGetElectricParValue() { 
 | 
  const { blLifeRecharge } = useLifeRechargeContext(); 
 | 
  
 | 
  const { data: electricParValueList, isLoading } = useQuery({ 
 | 
    queryKey: ['blLifeRecharge/getElectricSupportArea'], 
 | 
    queryFn: async () => { 
 | 
      return await blLifeRecharge.services.getElectricSupportArea({}, { showLoading: false }); 
 | 
    }, 
 | 
    select(data) { 
 | 
      return data.electricAreaList ?? []; 
 | 
    }, 
 | 
    placeholderData: () => ({} as ElectricSupportAreaResponse), 
 | 
  }); 
 | 
  
 | 
  return { 
 | 
    electricParValueList, 
 | 
  }; 
 | 
} 
 | 
  
 | 
export type UseGetUserLifePayOrderPageOptions = { 
 | 
  lifePayOrderType?: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>; 
 | 
}; 
 | 
  
 | 
export function useGetUserLifePayOrderPage(options: UseGetUserLifePayOrderPageOptions = {}) { 
 | 
  const { lifePayOrderType } = options; 
 | 
  
 | 
  const { blLifeRecharge } = useLifeRechargeContext(); 
 | 
  
 | 
  // const queryState = reactive({ 
 | 
  //   lifePayOrderType: LifeRechargeConstants.LifePayOrderTypeEnum, 
 | 
  // }); 
 | 
  
 | 
  const { infiniteLoadingProps } = useInfiniteLoading( 
 | 
    async ({ pageParam }) => { 
 | 
      let params: QueryLifePayOrderListInput = { 
 | 
        pageModel: { 
 | 
          rows: 20, 
 | 
          page: pageParam, 
 | 
          orderInput: [{ property: 'id', order: OrderInputType.Desc }], 
 | 
        }, 
 | 
        lifePayOrderType: unref(lifePayOrderType), 
 | 
        userId: blLifeRecharge.accountModel.userId, 
 | 
      }; 
 | 
  
 | 
      let res = await blLifeRecharge.services.getUserLifePayOrderPage(params, { 
 | 
        showLoading: false, 
 | 
      }); 
 | 
      res.data = res.data.map((x) => ({ 
 | 
        ...x, 
 | 
        frontStatus: convertOrderFrontStatus( 
 | 
          x.payStatus, 
 | 
          x.lifePayOrderStatus, 
 | 
          x.lifePayRefundStatus 
 | 
        ), 
 | 
      })); 
 | 
      return res; 
 | 
    }, 
 | 
    { 
 | 
      queryKey: [ 
 | 
        'blLifeRecharge/getUserLifePayOrderPage', 
 | 
        { 
 | 
          lifePayOrderType, 
 | 
          userId: blLifeRecharge.accountModel.userId, 
 | 
        }, 
 | 
      ], 
 | 
  
 | 
      select(data) { 
 | 
        console.log('data: ', data); 
 | 
        //  data.pages.map((item) => item.data.map((x) => convertOrderFrontStatus(x))) 
 | 
        return data; 
 | 
      }, 
 | 
    } 
 | 
  ); 
 | 
  
 | 
  return { 
 | 
    infiniteLoadingProps, 
 | 
  }; 
 | 
} 
 | 
  
 | 
type UseUserAccountAllListOptions = { 
 | 
  lifePayOrderType: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>; 
 | 
  onSuccess?: (data: UserAccountListOutput[]) => any; 
 | 
}; 
 | 
  
 | 
export function useUserAccountAllList({ 
 | 
  lifePayOrderType, 
 | 
  onSuccess, 
 | 
}: UseUserAccountAllListOptions) { 
 | 
  const { blLifeRecharge } = useLifeRechargeContext(); 
 | 
  
 | 
  const { data: userAccountAllList, isLoading } = useQuery({ 
 | 
    queryKey: [ 
 | 
      'blLifeRecharge/getUserAccountAllList', 
 | 
      blLifeRecharge.accountModel.userId, 
 | 
      lifePayOrderType, 
 | 
    ], 
 | 
    queryFn: async () => { 
 | 
      let params: QueryUserAccountAllListInput = { 
 | 
        userId: blLifeRecharge.accountModel.userId, 
 | 
        lifePayOrderType: unref(lifePayOrderType), 
 | 
      }; 
 | 
      return await blLifeRecharge.services.getUserAccountAllList(params, { showLoading: false }); 
 | 
    }, 
 | 
    placeholderData: () => [] as UserAccountListOutput[], 
 | 
    onSuccess(data) { 
 | 
      onSuccess?.(data); 
 | 
    }, 
 | 
  }); 
 | 
  
 | 
  const queryClient = useQueryClient(); 
 | 
  
 | 
  function invalidateQueries() { 
 | 
    return queryClient.invalidateQueries({ 
 | 
      queryKey: [ 
 | 
        'blLifeRecharge/getUserAccountAllList', 
 | 
        blLifeRecharge.accountModel.userId, 
 | 
        lifePayOrderType, 
 | 
      ], 
 | 
    }); 
 | 
  } 
 | 
  
 | 
  return { 
 | 
    userAccountAllList, 
 | 
    isLoading, 
 | 
    invalidateQueries, 
 | 
  }; 
 | 
} 
 | 
  
 | 
export function useAddUpdateUserAccount() { 
 | 
  const { blLifeRecharge } = useLifeRechargeContext(); 
 | 
  
 | 
  const queryClient = useQueryClient(); 
 | 
  
 | 
  function invalidateQueries(lifePayOrderType: LifeRechargeConstants.LifePayOrderTypeEnum) { 
 | 
    return queryClient.invalidateQueries({ 
 | 
      queryKey: [ 
 | 
        'blLifeRecharge/getUserAccountAllList', 
 | 
        blLifeRecharge.accountModel.userId, 
 | 
        lifePayOrderType, 
 | 
      ], 
 | 
    }); 
 | 
  } 
 | 
  
 | 
  async function addUpdateUserAccount(params: AddUpdateUserAccountInput) { 
 | 
    let res = await blLifeRecharge.services.addUpdateUserAccount(params); 
 | 
    if (res) { 
 | 
      invalidateQueries(params.lifePayType); 
 | 
    } 
 | 
    return res; 
 | 
  } 
 | 
  
 | 
  return { addUpdateUserAccount }; 
 | 
} 
 | 
  
 | 
type UseSetUserAccountBySelectOptions = { 
 | 
  lifePayOrderType: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>; 
 | 
  onSetUserAccount: (currentUserAccount: UserAccountListOutput) => any; 
 | 
  getDefaultUserAccount?: ( 
 | 
    userAccountList: UserAccountListOutput[] 
 | 
  ) => UserAccountListOutput | undefined; 
 | 
}; 
 | 
  
 | 
export function useSetUserAccountBySelect({ 
 | 
  lifePayOrderType, 
 | 
  onSetUserAccount, 
 | 
  getDefaultUserAccount = (data) => data[0], 
 | 
}: UseSetUserAccountBySelectOptions) { 
 | 
  const { userAccountAllList } = useUserAccountAllList({ 
 | 
    lifePayOrderType: lifePayOrderType, 
 | 
    onSuccess(data) { 
 | 
      if (data.length > 0) { 
 | 
        const currentUserAccount = getDefaultUserAccount(data); 
 | 
        if (currentUserAccount) { 
 | 
          onSetUserAccount?.(currentUserAccount); 
 | 
        } 
 | 
      } 
 | 
    }, 
 | 
  }); 
 | 
  
 | 
  function handleUserAccountChange(val: string) { 
 | 
    const currentUserAccount = userAccountAllList.value.find((x) => x.id === val); 
 | 
    onSetUserAccount?.(currentUserAccount); 
 | 
  } 
 | 
  
 | 
  return { 
 | 
    handleUserAccountChange, 
 | 
    userAccountAllList, 
 | 
  }; 
 | 
} 
 | 
  
 | 
export function useGetGasParValue() { 
 | 
  const { blLifeRecharge } = useLifeRechargeContext(); 
 | 
  
 | 
  const { data: gasParValueList, isLoading } = useQuery({ 
 | 
    queryKey: ['blLifeRecharge/getGasParValue'], 
 | 
    queryFn: async () => { 
 | 
      return await blLifeRecharge.services.getGasParValue({}, { showLoading: false }); 
 | 
    }, 
 | 
    select(data) { 
 | 
      return data?.gasParValue ?? []; 
 | 
    }, 
 | 
    placeholderData: () => ({} as GasParValueResponse), 
 | 
  }); 
 | 
  
 | 
  return { 
 | 
    gasParValueList, 
 | 
  }; 
 | 
} 
 | 
  
 | 
type UseIntroInfoOptions = { 
 | 
  lifePayOrderType: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>; 
 | 
  onSuccess?: (data: API.LifePayIntroInfoOutput[]) => any; 
 | 
}; 
 | 
  
 | 
export function useIntroInfo({ lifePayOrderType, onSuccess }: UseIntroInfoOptions) { 
 | 
  const { blLifeRecharge } = useLifeRechargeContext(); 
 | 
  
 | 
  const { data: introInfo } = useQuery({ 
 | 
    queryKey: ['blLifeRecharge/getIntroInfo', lifePayOrderType], 
 | 
    queryFn: async () => { 
 | 
      return await blLifeRecharge.services.getIntroInfo( 
 | 
        { 
 | 
          type: unref(lifePayOrderType), 
 | 
        }, 
 | 
        { 
 | 
          showLoading: false, 
 | 
        } 
 | 
      ); 
 | 
    }, 
 | 
    placeholderData: () => [] as API.LifePayIntroInfoOutput[], 
 | 
    onSuccess: (data) => { 
 | 
      onSuccess?.(data); 
 | 
    }, 
 | 
  }); 
 | 
  
 | 
  return { introInfo }; 
 | 
} 
 |