import { defineComponent, PropType } from 'vue';
import styles from './index.module.less';
import Plyr from 'plyr';
import 'plyr/dist/plyr.css';
import { Loading } from 'vant';
import { browser } from '@/helpers/utils';
export default defineComponent({
  name: 'm-video',
  props: {
    setting: {
      type: Object,
      default: () => ({})
    },
    controls: Boolean,
    height: String,
    src: {
      type: String,
      default: ''
    },
    poster: {
      type: String,
      default: ''
    },
    styleValue: {
      type: Object,
      default: () => ({})
    },
    preload: {
      type: String as PropType<'auto' | 'metadata' | 'none'>,
      default: 'auto'
    },
    currentTime: {
      type: Boolean,
      default: true
    },
    playsinline: {
      type: Boolean,
      default: true
    },
    preLoading: {
      type: Boolean,
      default: true
    }
    // onPlay: {
    //   type: Function,
    //   default: () => {}
    // }
  },
  emits: ['exitfullscreen', 'play', 'ready', 'enterfullscreen'],
  data() {
    return {
      player: null as any,
      loading: true // 首次进入加载中
    };
  },
  mounted() {
    this.loading = this.preLoading;
    this._init();
  },
  methods: {
    _init() {
      const controls = [
        'play-large',
        'play',
        'progress',
        'captions',
        'fullscreen'
      ];
      // if (browser().isApp) {
      //   controls.push('fullscreen');
      // }
      if (this.currentTime) {
        controls.push('current-time');
      }
      const params: any = {
        controls: controls,
        ...this.setting,
        invertTime: false
      };

      if (browser().iPhone) {
        params.fullscreen = {
          enabled: true,
          fallback: 'force',
          iosNative: true
        };
      }

      this.player = new Plyr((this as any).$refs.video, params);

      // fullscreen: {
      //     enabled: true,
      //     fallback: 'force',
      //     iosNative: true
      //   }
      this.player.elements.container
        ? (this.player.elements.container.style.height = this.height || '210px')
        : null;

      if (this.preload === 'none') {
        this.loading = false;
      }
      this.player.on('loadedmetadata', () => {
        this.loading = false;
        this.domPlayVisibility(false);
      });

      this.player.on('loadeddata', () => {
        this.$emit('ready', this.player);
      });

      this.player.on('play', () => {
        this.$emit('play', this.player);
      });

      this.player.on('enterfullscreen', () => {
        // console.log('fullscreen', this.player.elements);
        // const fragment = document.createDocumentFragment();
        // const i = document.createElement('i');
        // i.id = 'fullscreen-back';
        // i.className = 'van-icon van-icon-arrow-left video-back';
        // i.addEventListener('click', () => {
        //   this.player.fullscreen.exit();
        // });
        // console.log(document.getElementsByClassName('plyr'), i);
        // fragment.appendChild(i);
        // // const parentNode = document.getElementsByClassName('plyr')[0];
        // // parentNode.insertBefore(fragment, parentNode.firstChild);
        // this.player.elements.container.appendChild(fragment);

        this.$emit('enterfullscreen');
      });

      this.player.on('exitfullscreen', () => {
        console.log('exitfullscreen');
        // const i = document.getElementById('fullscreen-back');
        // i && i.remove();
        this.$emit('exitfullscreen');
      });
    },
    // 操作功能
    domPlayVisibility(hide = true) {
      const controls = document.querySelector('.plyr__controls');
      const controls2 = document.querySelector('.plyr__control--overlaid');
      if (hide) {
        controls?.setAttribute('style', 'display:none');
        controls2?.setAttribute('style', 'display:none');
      } else {
        controls?.removeAttribute('style');
        setTimeout(() => {
          controls2?.removeAttribute('style');
        }, 200);
      }
    },
    onStop() {
      this.player.stop();
    },
    onExitScreen() {
      this.player.fullscreen.active && this.player.fullscreen.exit();
    },
    onPlay() {
      this.player?.play();
    }
  },
  unmounted() {
    this.player?.destroy();
  },
  render() {
    return (
      <div class={styles['video-container']}>
        <video
          ref="video"
          class={styles['video']}
          src={this.src}
          playsinline={this.playsinline}
          poster={this.poster}
          preload={this.preload}
          style={{ ...this.styleValue }}></video>
        {/* </div> */}
        {/* 加载视频使用 */}
        {this.loading && (
          <div
            class={styles.loadingVideo}
            style={{
              height: this.height || '210px'
            }}>
            <Loading
              size={36}
              color="#FF8057"
              vertical
              style={{ height: '100%', justifyContent: 'center' }}>
              加载中...
            </Loading>
          </div>
        )}
      </div>
    );
  }
});
