import React, { Component } from "react";
import {
  Platform,
  Text,
  View,
  ImageBackground,
  Button,
  Image,
  TouchableOpacity,
  StyleSheet
} from "react-native";
import { createStackNavigator, createAppContainer } from "react-navigation";
import Video from "react-native-video";
const instructions = Platform.select({
  ios: "Press Cmd+R to reload,\n" + "Cmd+D or shake for dev menu",
  android:
    "Double tap R on your keyboard to reload,\n" +
    "Shake or press menu button for dev menu"
});

type Props = {};
export default class CusVideo extends React.Component {
  state = {
    rate: 1,
    volume: 1,
    muted: false,
    resizeMode: "stretch",
    duration: 0.0,
    currentTime: 0.0,
    paused: false,
    wheel: false
  };

  render() {
    return (
      <View style={this.props.style}>
        <Video
          style={{ flex: 1 }}
          source={{
            uri: this.props.uri
          }}
          ref={ref => {
            this.player = ref;
          }}
          // poster={this.props.poster}
          resizeMode={this.state.resizeMode}
          // posterResizeMode={this.state.resizeMode}
          rate={this.state.rate} //播放速率
          paused={this.state.paused} //暂停
          volume={this.state.volume} //调节音量
          muted={this.state.muted} //控制音频是否静音
          resizeMode={this.state.resizeMode} //缩放模式
          onLoadStart={this.loadStart} // 当视频开始加载时的回调函数
          onLoad={this.onLoad} //加载媒体并准备播放时调用的回调函数。
          onProgress={this.onProgress} //视频播放过程中每个间隔进度单位调用的回调函数
          onEnd={this.onEnd} //视频播放结束时的回调函数
          onAudioBecomingNoisy={this.onAudioBecomingNoisy} //音频变得嘈杂时的回调 - 应暂停视频
          onAudioFocusChanged={this.onAudioFocusChanged} //音频焦点丢失时的回调 - 如果焦点丢失则暂停
          repeat={this.state.wheel} //确定在到达结尾时是否重复播放视频。
          onError={this.onError} // 当视频不能加载,或出错后的回调函数
          playInBackground={false} // 当app转到后台运行的时候,播放是否暂停
          playWhenInactive={true} // [iOS] Video continues to play when control or notification center are shown. 仅适用于IOS
        />
        <View style={[styles.player_controller]}>
          <View
            style={{
              flex: 1,
              alignItems: "center"
            }}
          >
            {/* 暂停播放按钮 */}
            <TouchableOpacity
              //点击事件放在这个组件里才管用
              style={{
                justifyContent: "center",
                width: "100%",
                height: "100%"
              }}
              onPress={() => this.play()}
            >
              <Image
                style={[styles.player_pause_icon]}
                //source={require("../imgs/player_image_state_pause.png")}
              />
            </TouchableOpacity>
          </View>
          <View style={{ flex: 3 }}>
            {/* //左侧当前播放时长 */}
            <Text style={[styles.player_time]}>
              {formatTime(this.state.currentTime)}
            </Text>
          </View>
          <View
            style={{
              flex: 7,
              backgroundColor: "yellow"
            }}
          >
            {/* //中间进度条 */}
            {/* <SeekBar
                style={{
                  flex: 1,
                  alignItems: "center",
                  justifyContent: "center",
                  width: "100%"
                }}
                max={this.state.duration}
                progress={this.state.currentTime}
              /> */}
          </View>
          <View style={{ flex: 3 }}>
            {/* //右侧总时长 */}
            <Text style={[styles.player_time]}>
              {formatTime(this.state.duration)}
            </Text>
          </View>
          <TouchableOpacity
            style={{ flex: 1 }}
            onPress={() => this.presentFullscreenPlayer()}
          >
            <View style={{ flex: 1 }}>
              {/* //放大按钮 */}
              <Image style={[styles.player_pause_icon]} />
            </View>
          </TouchableOpacity>
        </View>
      </View>
    );
  }

  loadStart() {
    // alert("loadStart");
  }
  onLoad = data => {
    //获取的是秒数
    this.setState({ duration: data.duration });
  };
  onProgress = data => {
    this.setState({
      currentTime: data.currentTime
    });
  };

  onError() {
    alert("播放器异常");
  }
  onEnd() {
    alert("播放结束");
  }
  play() {
    if (this.state.paused) {
      this.start();
    } else {
      this.pause();
    }
  }
  pause() {
    this.setState({ paused: true });
    this.player_icon_index = 1;
  }
  start() {
    this.setState({ paused: false });
    this.player_icon_index = 0;
  }
  showToast(params) {
    // ToastExample.message(params);
    ToastExample.show(params, ToastExample.SHORT);
  }
  presentFullscreenPlayer() {
    // alert("点击调用全屏");
    this.props.videofullScreenPlayer();
    // this.player.presentFullscreenPlayer();
  }

  refreshVideo() {
    this.setState({
      duration: 0,
      currentTime: 0
    });
  }
}

const styles = StyleSheet.create({
  player_controller: {
    flexDirection: "row",
    position: "absolute",
    width: "100%",
    height: 50,
    alignItems: "center",
    bottom: 0
  },
  player_pause_icon: {
    width: "100%",
    resizeMode: "center",
    height: "80%",
    justifyContent: "center",
    alignItems: "center",
    backgroundColor: "blue"
  },
  player_time: {
    fontSize: 18,
    color: "white",
    alignItems: "center",
    justifyContent: "center",
    textAlignVertical: "center",
    textAlign: "center"
  }
});

/**
 * 将秒转换为 分:秒
 * s int 秒数
 */
function formatTime(s) {
  //计算分钟
  //算法:将秒数除以60,然后下舍入,既得到分钟数
  var h;
  h = Math.floor(s / 60);
  //计算秒
  //算法:取得秒%60的余数,既得到秒数
  s = Math.round(s % 60);
  //将变量转换为字符串
  h += "";
  s += "";
  //如果只有一位数,前面增加一个0
  h = h.length == 1 ? "0" + h : h;
  s = s.length == 1 ? "0" + s : s;
  return h + ":" + s;
}