import { Image, ScrollView, View } from '@tarojs/components'
import Taro from '@tarojs/taro'
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import classnames from 'classnames'
import styles from './index.module.scss'
// import BottomBtns from '@/components/BottomBtns'
import { formatPriceDiv } from '@/common/format'
import Popup from '@/components/popup'
import useCheckAuthorize from '@/use/useCheckAuthorize'
import { alert } from '@/common/common'
import { GetPayCode } from '@/api/order'
import { formatDateTime, formatRemoveHashTag, formatWeightDiv } from '@/common/format'
import { PAY_H5_CODE_URL } from '@/common/constant'

interface Props {
  obj: any
  // picUrl?: string,
  showPopup: boolean
  popupClose: () => void
}

const CodeList = (props: Props) => {
  const { fetchData: payFetch } = GetPayCode()
  const [PicUrl, setPicUrl] = useState<string>('')

  const getPic = async() => {
    Taro.showLoading({
      title: '请稍等...',
      mask: true,
    })
    const list: any = []
    props.obj.product_list?.forEach((item) => {
      item.product_colors.forEach((it) => {
        list.push({
          product_code: item.code,
          product_name: item.name,
          product_color_code: formatRemoveHashTag(it.code),
          product_color_name: it.name,
          num: it.roll.toString(),
          weight: formatWeightDiv(it.actual_weight).toString(),
          sale_price: (it.sale_price / 100).toString(),
          total_price:
                          it.total_sale_price !== 0
                            ? (it.total_sale_price / 100).toString()
                            : (it.estimate_amount / 100).toString(),
          length: (it.length / 100).toString(),
          weight_error: formatWeightDiv(it.weight_error).toString(),
        })
      })
    })
    const query = {
      list,
      title: '面料销售电子确认单',
      // show_qrcode: true,
      // show_barcode: true,
      order_type: props?.obj.sale_mode_name,
      shipment_mode: props?.obj.shipment_mode_name,
      company: props?.obj.title_purchaser_name,
      sale_user: props?.obj.sale_user_name,
      order_created_time: formatDateTime(props?.obj.create_time),
      order_no: props?.obj.order_no,
      target_user_name: props?.obj.target_user_name,
      target_address: props?.obj.address_detail,
      target_description: props?.obj.remark,
      pay_account: props?.obj.transfer_remittance_account,
      bank_account_name: props?.obj.account_name,
      bank_name: props?.obj.bank_of_deposit,
      pay_type: props?.obj.settle_mode_name,
      client: props?.obj.purchaser_name,
      phone: props?.obj.target_user_phone,
      order_total_length: (props?.obj.total_number / 100).toString(),
      order_total_price: (
        props?.obj.bill_total_sale_price / 100
      ).toString(),
      total_weight_error_discount: (
        props?.obj.total_weight_error_discount / 100
      ).toString(),
      order_total_num: props?.obj.total_number.toString(),
      qrcode: `${PAY_H5_CODE_URL}?sale_order_no=${props?.obj.order_no}`,
      order_total_weight: (props?.obj.total_weight / 1000).toString(),
      estimate_amount: (props?.obj.estimate_amount / 100).toString(),
      total_sale_price: (props?.obj.total_sale_price / 100).toString(),
      actual_amount: (props?.obj.actual_amount / 100).toString(),
      wait_pay_amount: (props?.obj.wait_pay_amount / 100).toString(),
      order_total_weight_error: (
        props?.obj.total_weight_error / 1000
      ).toString(),
      show_sale_price: props?.obj?.sale_mode === 0 && props?.obj?.is_display_price ? true : !!((props?.obj?.sale_mode === 1 || props?.obj?.sale_mode === 2)),
      show_total_price: props?.obj?.sale_mode === 0 && props?.obj?.is_display_price ? true : !!((props?.obj?.sale_mode === 1 || props?.obj?.sale_mode === 2)),
      show_estimate_amount: props?.obj?.sale_mode === 0 && props?.obj?.is_display_price ? true : !!((props?.obj?.sale_mode === 1 || props?.obj?.sale_mode === 2)),
      show_total_sale_price: props?.obj?.sale_mode === 0 && props?.obj?.is_display_price ? true : !!((props?.obj?.sale_mode === 1 || props?.obj?.sale_mode === 2)),
      show_total_weight_error_discount: props?.obj?.sale_mode === 0 && props?.obj?.is_display_price ? true : !!((props?.obj?.sale_mode === 1 || props?.obj?.sale_mode === 2)),
      show_actual_amount: props?.obj?.sale_mode === 0 && props?.obj?.is_display_price ? true : !!((props?.obj?.sale_mode === 1 || props?.obj?.sale_mode === 2)),
      show_wait_pay_amount: props?.obj?.sale_mode === 0 && props?.obj?.is_display_price ? true : !!((props?.obj?.sale_mode === 1 || props?.obj?.sale_mode === 2)),
      show_tips: true,
      tips: `请核对本单后验收， <b>如发现质量问题，请于收到货之日起3天内与平台客服联系协商解决，</b>逾期不作处理即表示购方默认对货物无异议；<b>购方确认无任何问题方可裁剪/加工，一经裁剪，缩水等工艺，平台概不负责；</b>
      看布购货，请先试缩水，并注意分缸裁布！如需撞色拼接，请先试色牢度。非质量问题，恕不退换，谢谢合作！`,
    }
    const res = await payFetch(query)
    if (res.data) {
      setPicUrl(res.data.base64)
      Taro.hideLoading()
    }
  }

  const fileData = useRef({
    filePath: '',
    base64: '',
  })

  // 预览图片
  const showImage = () => {
    const time = new Date().valueOf()
    const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(PicUrl) || []
    const filePath = `${Taro.env.USER_DATA_PATH}/img${time}.${format}`
    fileData.current.filePath = filePath
    fileData.current.base64 = bodyData
    const save = Taro.getFileSystemManager()
    save.writeFile({
      filePath: fileData.current.filePath,
      data: fileData.current.base64,
      encoding: 'base64',
    })
    Taro.previewImage({
      current: fileData.current.filePath, // 当前显示
      urls: [fileData.current.filePath], // 需要预览的图片http链接列表
    })
  }

  // 检查是否开启保存图片权限
  const { check } = useCheckAuthorize({ scope: 'scope.writePhotosAlbum', msg: '您没授权，无法保存图片' })

  // 保存图片
  const saveImage = () => {
    const time = new Date().valueOf()
    const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(PicUrl) || []
    const filePath = `${Taro.env.USER_DATA_PATH}/img${time}.${format}`
    fileData.current.filePath = filePath
    fileData.current.base64 = bodyData
    const save = Taro.getFileSystemManager()
    save.writeFile({
      filePath: fileData.current.filePath,
      data: fileData.current.base64,
      encoding: 'base64',
    })
    alert.loading('正在保存图片')
    Taro.saveImageToPhotosAlbum({
      filePath: fileData.current.filePath,
      success() {
        alert.success('图片保存成功')
      },
      fail(err) {
        console.log('err::', err)
      },
    })
  }
  const saveImageCheck = async() => {
    const res = await check()
    res && saveImage()
  }
  useEffect(() => {
    // 判断进来的是否是空对象，减少性能问题
    const length = Object.keys(props.obj)
    if (length.length > 0) { getPic() }
  }, [props.obj])
  return (
    <Popup show={props.showPopup} title="销售码单" onClose={() => props.popupClose?.()}>
      <View className={styles.popupBox}>
        <ScrollView enhanced scrollY className={styles.scroStyle}>
          <View className={styles.pic}>
            <Image lazyLoad mode="widthFix" style={{ width: '100%', height: '100%' }} src={PicUrl} onClick={() => showImage()}></Image>
          </View>
        </ScrollView>
        <View className={styles.sure} onClick={() => saveImageCheck()}>保存图片</View>
      </View>
    </Popup>
  )
}

export default memo(CodeList)
