/**
 * 钱包页面
 * @邠心vbe on 2021/05/07
 */
import React, { Component } from 'react';
import { View, Text, StyleSheet, ScrollView, RefreshControl, Image, Pressable } from 'react-native';
import { Balance } from './Payment';
import { PageList } from '../Router';
import History from './History';
import Overview from './Overview';
import { MyRefreshProps } from '../../components/ThemesConfig';
import { ElevationObject } from '../../components/Button';

export default class Wallet extends Component {
  constructor(props) {
    super(props);
    this.state = {
      balance: 0,
      tabIndex: 0,
      refreshing: false,
      tabWidth: 0,
      tabHeight: 0,
      balanceText: '',
      pageShown: false
    };
  }

  componentDidMount() {
    this.props.navigation.addListener('focus', () => {
      this.onRefresh();
      getUserInfo(info => {
        this.setState({
          balance: info.credit,
          balanceText: info.creditStr,
          pageShown: true
        })
      }, true)
    });
    this.props.navigation.addListener('beforeRemove', (e) => {
      if (this.state.pageShown) {
        e.preventDefault();
        this.setState({
          pageShown: false
        }, () => {
          setTimeout(() => {
            goBack();
          }, 100);
        });
      }
    });
  }

  changeTab(index) {
    if (this.state.tabIndex !== index) {
      this.setState({
        tabIndex: index
      });
    }
  }

  onRefresh() {
    this.setState({
      refreshing: true
    });
  }

  stopRefresh() {
    this.setState({
      refreshing: false
    });
  }

  tabLayout({nativeEvent}) {
    //console.log('tab layout\n\n\n\n\n', nativeEvent.layout);
    if (nativeEvent.layout.width) {
      this.setState({
        tabWidth: nativeEvent.layout.width,
        tabHeight: 0.171955 * nativeEvent.layout.width
      })
    }
  }

  render() {
    return (
      <ScrollView
        style={styles.container}
        refreshControl={
          <RefreshControl
            {...MyRefreshProps()}
            refreshing={this.state.refreshing}
            onRefresh={() => this.onRefresh()}
          />
        }>
        {/* <View style={styles.balanceView}>
          <Payment 
            balance={this.state.balance}
            isPayPerUse={false}
            isWallet={true}
            payType={"Credit Wallet"}
            topup={() => toTopupPage()}/>
        </View> */}
        <Balance
          balance={this.state.balance}
          balanceText={this.state.balanceText}
          action={$t('wallet.purchaseCredits')/*"Top Up"*/}
          page={PageList.topupNew}
        />
        <View style={styles.contentView}>
          <View
            style={styles.tabView}
            onLayout={props => this.tabLayout(props)}>
            { this.state.tabIndex == 0
            ? <Image
                style={[styles.tabBackgroundLeft, {width: this.state.tabWidth + 1, height: this.state.tabHeight}]}
                resizeMode="cover"
                source={require('../../images/wallet/tab-left.png')}
              />
            : <Image
                style={[styles.tabBackgroundRight, {width: this.state.tabWidth + 1, height: this.state.tabHeight}]}
                resizeMode="cover"
                source={require('../../images/wallet/tab-right.png')}
              />
            }
            <Pressable
              style={styles.tabItem}
              onPress={() => this.changeTab(0)}>
              <Text
                style={[
                  styles.tabText,
                  this.state.tabIndex == 0 && styles.active
                ]}
                numberOfLines={1}>
                {$t('wallet.tabOverview')}
              </Text>
            </Pressable>
            <View style={{width: 16}}></View>
            <Pressable
              style={styles.tabItem}
              onPress={() => this.changeTab(1)}>
              <Text
                style={[
                  styles.tabText,
                  this.state.tabIndex == 1 && styles.active
                ]}
                numberOfLines={1}>
                {$t('wallet.tabHistory')}
              </Text>
            </Pressable>
          </View>
          <Overview
            atAglance={false}
            skeleton={!this.state.pageShown}
            refresh={this.state.refreshing}
            refreshed={() => this.stopRefresh()}
            shown={this.state.tabIndex == 0}/>
          <History
            refresh={this.state.refreshing}
            refreshed={() => this.stopRefresh()}
            shown={this.state.tabIndex == 1}/>
        </View>
      </ScrollView>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#f5f5f5'
  },
  balanceView: {
    paddingTop: 12,
    paddingLeft: 16,
    paddingRight: 16,
    paddingBottom: 12,
    backgroundColor: colorLight
  },
  tabView: {
    height: 60,
    padding: 16,
    overflow: 'hidden',
    alignItems: 'center',
    flexDirection: 'row',
    justifyContent: 'center'
  },
  tabItem: {
    flex: 1,
    marginTop: -14,
    alignItems: 'center',
    justifyContent: 'center'
  },
  tabText: {
    color: textSecondary,
    fontSize: 16,
    paddingTop: 5,
    paddingLeft: 36,
    paddingRight: 36,
    paddingBottom: 5,
  },
  active: {
    color: textPrimary,
    fontWeight: 'bold'
  },
  contentView: {
    ...$margin(8, 16, 16),
    overflow: 'hidden',
    borderRadius: 6,
    ...ElevationObject(5),
    backgroundColor: colorLight
  },
  tabBackgroundLeft: {
    top: -1,
    left: -1,
    right: 0,
    paddingRight: 1,
    width: $vw(90),
    height: $vw(14),
    position: 'absolute'
  },
  tabBackgroundRight: {
    top: -1,
    left: 0,
    right: -1,
    paddingRight: 1,
    width: $vw(90),
    height: $vw(14),
    position: 'absolute'
  }
})