import { ElImage, ElLoading, ElMessage, ElUpload } from 'element-plus'
import { defineComponent } from 'vue'
import styles from './index.module.less'
import iconUpload from './images/icon_upload.png'
import request from '@/helpers/request'

export default defineComponent({
  name: 'col-upload',
  props: {
    modelValue: {
      type: String,
      default: ''
    },
    disabled: {
      type: Boolean,
      default: false
    },
    bucket: {
      type: String,
      default: 'daya'
    },
    size: {
      type: Number,
      default: 5 // 默认5M
    },
    accept: {
      type: String,
      default: 'images/*'
    },
    tips: {
      type: String,
      default: '请上传图片'
    },
    extraTips: {
      type: String,
      default: '图片最大不能超过5MB'
    }
  },
  data() {
    return {
      ossUploadUrl: 'https://ks3-cn-beijing.ksyuncs.com/' + this.bucket,
      dataObj: {
        policy: '',
        signature: '',
        key: '',
        KSSAccessKeyId: '',
        acl: 'public-read',
        name: ''
      },
      fileList: [] as any,
      loading: null as any
    }
  },
  methods: {
    handleSuccess() {
      this.loading?.close()
      let url = this.ossUploadUrl + '/' + this.dataObj.key
      console.log(url)
      this.$emit('update:modelValue', url)
    },
    handleRemove() {
      console.log('remove')
    },
    handleChange() {
      console.log('handleChange')
    },
    handleProgress() {
      console.log('handleProgress')
    },
    handleError() {
      this.loading?.close()
    },
    async beforeUpload(file: any) {
      // beforeUpload
      console.log(file)
      // let fileType = true
      // if (props.rules.type && props.rules.type.length > 0) {
      //   const fileExtension = file.name.split('.').pop().toUpperCase()
      //   console.log(
      //     props.rules.type,
      //     fileExtension,
      //     props.rules.type.indexOf(fileExtension) != -1
      //   )
      //   if (props.rules.type.indexOf(fileExtension) != -1) {
      //     fileType = true
      //   } else {
      //     fileType = false
      //     ElMessage.error('请上传正确的文件!')
      //     return false
      //   }
      // }

      let isLt2M = true
      if (this.size) {
        isLt2M = file.size / 1024 / 1024 < this.size
        if (!isLt2M) {
          ElMessage.error(`文件大小不能超过${this.size}M!`)
          return false
        }
      }
      this.loading = ElLoading.service({
        target: this.$refs.uploadDom as HTMLElement,
        lock: true,
        fullscreen: false,
        text: '上传中...',
        background: 'rgba(0, 0, 0, 0.7)'
      })
      console.log(this.loading)
      try {
        let fileName = file.name.replaceAll(' ', '_')
        let key = new Date().getTime() + fileName
        let obj = {
          filename: fileName,
          bucketName: this.bucket,
          postData: {
            filename: fileName,
            acl: 'public-read',
            key: key,
            unknowValueField: []
          }
        }
        const { data } = await request.post('/api-website/getUploadSign', {
          data: obj
        })
        this.dataObj = {
          policy: data.policy,
          signature: data.signature,
          key: key,
          KSSAccessKeyId: data.kssAccessKeyId,
          acl: 'public-read',
          name: fileName
        }
      } catch (e) {
        this.loading.close()
      }
    },
    handleExceed() {}
  },
  render() {
    return (
      <div class={styles.colUpload}>
        <ElUpload
          disabled={this.disabled}
          action={this.ossUploadUrl}
          data={this.dataObj}
          onSuccess={this.handleSuccess}
          onRemove={this.handleRemove}
          onChange={this.handleChange}
          onProgress={this.handleProgress}
          onError={this.handleError}
          fileList={this.fileList}
          showFileList={false}
          accept={this.accept}
          beforeUpload={this.beforeUpload}
          onExceed={this.handleExceed}
          ref="uploadRef"
        >
          <div
            // id="uploadDom"
            ref="uploadDom"
            class={styles.uploadClass}
            style={{ height: '106px' }}
          >
            {this.modelValue ? (
              <ElImage
                src={this.modelValue}
                fit="cover"
                class={styles.uploadSection}
              />
            ) : (
              <div
                class={[
                  styles.uploadSection,
                  'flex items-center flex-col justify-center'
                ]}
              >
                <img src={iconUpload} class="w-8 h-7 mb-3" />
                <p>{this.tips}</p>
              </div>
            )}
          </div>
        </ElUpload>

        <p class="text-3 text-[#999999] leading-6 pt-1">{this.extraTips}</p>
      </div>
    )
  }
})
