/**
 * 新版充电结算页面
 * @邠心vbe on 2023/02/08
 */
import React, { Component } from 'react';
import { View, Text, StyleSheet, ScrollView, RefreshControl } from 'react-native';
import apiCharge from '../../api/apiCharge';
import Button from '../../components/Button';
import Dialog from '../../components/Dialog';
import { MyRefreshProps } from '../../components/ThemesConfig';
import utils from '../../utils/utils';
import { PageList } from '../Router';
import app from '../../../app.json';
import TextView from '../../components/TextView';

export default class Summary extends Component {
  constructor(props) {
    super(props);
    this.state = {
      isActully: true,
      refreshing: false,
      summaryInfo: {
        top: {},
        station: {},
        connector: {},
        chargingFee: {},
        idleFee: {},
        reservationFee: {},
        payment: {}
      },
      chargingPk: "",
      isPendding: false
    };
    this.action = "";
    this.canBack = false;
  }

  componentDidMount() {
    const params = this.props.route.params;
    if (params.chargingPk) {
      Dialog.showProgressDialog();
      this.setState({
        chargingPk: params.chargingPk
      })
      if (params.action && params.action == "view") {
        this.setState({
          isActully: false
        });
        this.getSummaryData(params.chargingPk);
      } else {
        setTimeout(() => {
          this.getSummaryData(params.chargingPk);
        }, 1500);
      }
    }
    if (params.action) {
      this.action = params.action;
    }
    this.props.navigation.addListener('focus', e => {
      this.canBack = false;
    });
    this.props.navigation.addListener('beforeRemove', e => {
      if (this.state.isActully && !this.canBack) {
        this.toRating();
        e.preventDefault();
      }
    });
  }

  getSummaryData(chargingPk) {
    apiCharge.getChargeSummaryV2({
      chargingPk: chargingPk
    }).then(res => {
      Dialog.dismissLoading();
      if (res.data) {
        this.setState({
          refreshing: false,
          summaryInfo: res.data,
          isPendding: (res.data.hasSettled != true)
        });
      }
    }).catch((err) => {
      Dialog.dismissLoading();
      toastShort(err);
      this.setState({
        isPendding: true,
        refreshing: false
      });
    });
  }

  onRefresh() {
    if (this.state.chargingPk) {
      this.setState({
        refreshing: true
      });
      this.getSummaryData(this.state.chargingPk);
    }
  }

  toRating() {
    this.canBack = true;
    if (this.action == "view") {
      goBack();
    } else {
      //routeUtil.resetToHome(this.props);
      startPage(PageList.home);
      //startPage(PageList.rating, this.state.stationInfo);
    }
  }

  toTransaction() {
    if (this.action == "view") {
      goBack();
    } else {
      startPage(PageList.wallet)
    }
  }

  getSummaryText(data) {
    if (this.state.summaryInfo?.paymentType == 'Fleet Credit') {
      return '-';
    } else {
      return currency + '' + (data ?? '0');
    }
  }

  getTaxTitle(title="") {
    if (this.state.summaryInfo?.taxRate) {
      return title.replace("$s", this.state.summaryInfo.taxRate)
    } else {
      return title;
    }
  }

  render() {
    if (this.state.isPendding) {
      return (
        <View style={styles.container}>
          <View style={styles.processContent}>
            <TextView style={styles.processTitle}>{$t("receipt.processTitle")}</TextView>
            <TextView style={styles.processText}>{$t("receipt.processMessage1")}</TextView>
            <TextView style={styles.processText}>
              {$t("receipt.processMessage2")}
              <Text style={[ui.bold, ui.underline]} onPress={() => this.toTransaction()}>{$t("receipt.processMessage3")}</Text>.
            </TextView>
            <TextView style={styles.processText}>{$t("receipt.processMessage4")}</TextView>
          </View>
          <View style={styles.bottomButton}>
            <Button
              text={$t('home.done')}
              elevation={1.5}
              onClick={() => this.toRating()}/>
          </View>
        </View>
      )
    } else {
      return (
        <ScrollView
          style={styles.container}
          refreshControl={
            <RefreshControl
              {...MyRefreshProps()}
              refreshing={this.state.refreshing}
              onRefresh={() => this.onRefresh()}
            />
          }>
          { utils.isNotEmpty(this.state.summaryInfo.top) &&
            <View style={styles.headerView}>
              { this.state.isActully && <>
                <Octicons
                  name="check-circle-fill"
                  color={colorAccent}
                  size={56}/>
                <TextView style={styles.topTitle}>{$t('receipt.successful')}</TextView>
                <TextView style={styles.topDesc}>{$t('receipt.chargingSessionComplete')}</TextView>
              </>}
              { utils.isNotEmpty(this.state.summaryInfo.top.company) &&
                <View style={styles.formRow}>
                  <TextView style={styles.label}>{$t('sign.labelCompany')}:</TextView>
                  <TextView style={styles.text}>{this.state.summaryInfo.top.company}</TextView>
                </View>
              }
              { utils.isNotEmpty(this.state.summaryInfo.top.registrationNo) &&
                <View style={styles.formRow}>
                  <TextView style={styles.label}>{$t('receipt.labelRegistrationNo')}</TextView>
                  <TextView style={styles.text}>{this.state.summaryInfo.top.registrationNo}</TextView>
                </View>
              }
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('receipt.labelTransactionID')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.top.transactionId}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('receipt.labelReferenceID')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.top.referenceId}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('receipt.labelDateTime')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.top.dateTime}</TextView>
              </View>
            </View>
          }
          {/* <View style={styles.sections}>
            <View style={styles.formRow}>
              <Text style={styles.label}>{$t('wallet.labelTransactionId')}</Text>
              <Text style={styles.text}>{this.state.summaryInfo.transactionPk}</Text>
            </View>
            <View style={styles.formRow}>
              <Text style={styles.label}>{$t('wallet.labelReferenceId')}</Text>
              <Text style={styles.text}>{this.state.summaryInfo.chargingPk}</Text>
            </View>
            <View style={styles.formRow}>
              <Text style={styles.label}>{$t('wallet.labelDateTime')}</Text>
              <Text style={styles.text}>{this.state.summaryInfo.dateTime}</Text>
            </View>
          </View> */}
          { utils.isNotEmpty(this.state.summaryInfo.station) &&
            <View style={styles.sections}>
              <TextView style={styles.formTitle}>{$t('wallet.labelYourStation')}</TextView>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('wallet.labelStationId')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.station.stationId}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('receipt.labelSiteName')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.station.siteName ?? "-"}</TextView>
              </View>
            </View>
          }
          { utils.isNotEmpty(this.state.summaryInfo.connector) &&
            <View style={styles.sections}>
              <TextView style={styles.formTitle}>{$t('wallet.labelYourConnector')}</TextView>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('charging.labelType')}:</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.connector.type}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('charging.labelPower')}:</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.connector.power}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('charging.labelRates')}:</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.connector.rates}</TextView>
              </View>
            </View>
          }
          { utils.isNotEmpty(this.state.summaryInfo.chargingFee) &&
            <View style={styles.sections}>
              <TextView style={styles.formTitle}>{$t('receipt.breakdownChargingFees')}</TextView>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('wallet.labelChargeTime')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.chargingFee.chargeTime ?? "-"}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('wallet.labelChargeDelivered')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.chargingFee.chargeDelivered ?? 0}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{this.getTaxTitle($t('receipt.labelChargTransSubtotal2'))}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.chargingFee.transactionSubtotal}</TextView>
              </View>
            </View>
          }
          { utils.isNotEmpty(this.state.summaryInfo.idleFee) &&
            <View style={styles.sections}>
              <TextView style={styles.formTitle}>{$t('receipt.breakdownIdlesFees')}</TextView>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('receipt.labelIdleStartTime')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.idleFee.startTime}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('receipt.labelIdleDuration')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.idleFee.duration}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{this.getTaxTitle($t('receipt.labelIdleFeeSubtotal2'))}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.idleFee.subtotal}</TextView>
              </View>
            </View>
          }
          { utils.isNotEmpty(this.state.summaryInfo.reservationFee) &&
            <View style={styles.sections}>
              <TextView style={styles.formTitle}>{$t('receipt.breakdownReservationFees')}</TextView>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('receipt.labelTimeReservation')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.reservationFee.reservationTime}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('receipt.labelDurationReservation')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.reservationFee.reservationDuration}</TextView>
              </View>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{this.getTaxTitle($t('receipt.labelReservationFeeSubtotal2'))}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.reservationFee.reservationFeeSubtotal}</TextView>
              </View>
            </View>
          }
          { utils.isNotEmpty(this.state.summaryInfo.payment) &&
            <View style={styles.sections}>
              <TextView style={styles.formTitle}>{$t('receipt.breakdownPayment')}</TextView>
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('wallet.labelPaymentMadeBy')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.payment.paymentMadeBy ?? "-"}</TextView>
              </View>
              { utils.isNotEmpty(this.state.summaryInfo.payment.transactionSubtotal) &&
                <View style={styles.formRow}>
                  <TextView style={styles.label}>{this.getTaxTitle($t('receipt.labelChargTransSubtotal2'))}</TextView>
                  <TextView style={styles.text}>{this.state.summaryInfo.payment.transactionSubtotal}</TextView>
                </View>
              }
              { utils.isNotEmpty(this.state.summaryInfo.payment.idleFeeSubtotal) &&
                <View style={styles.formRow}>
                  <TextView style={styles.label}>{this.getTaxTitle($t('receipt.labelIdleFeeSubtotal2'))}</TextView>
                  <TextView style={styles.text}>{this.state.summaryInfo.payment.idleFeeSubtotal}</TextView>
                </View>
              }
              { utils.isNotEmpty(this.state.summaryInfo.payment.reservationFeeSubtotal) &&
                <View style={styles.formRow}>
                  <TextView style={styles.label}>{this.getTaxTitle($t('receipt.labelReservationFeeSubtotal2'))}</TextView>
                  <TextView style={styles.text}>{this.state.summaryInfo.payment.reservationFeeSubtotal}</TextView>
                </View>
              }
              { utils.isNotEmpty(this.state.summaryInfo.payment.finalPayment) &&
                <View style={styles.formRow}>
                  <TextView style={styles.label}>
                    { utils.isNotEmpty(this.state.summaryInfo.payment.discountCredit)
                    ? $t('receipt.labelAfterDiscount')
                    : $t('receipt.labelFinalPaymentAmount')
                    }
                  </TextView>
                  <TextView style={styles.text}>{this.state.summaryInfo.payment.finalPayment ?? "-"}</TextView>
                </View>
              }
              {/* <View style={styles.formRow}>
                <Text style={styles.label}>{$t('wallet.labelChargeRates')}</Text>
                <Text style={styles.text}>{currency}{this.state.summaryInfo.chargeRates ?? '0.0'}</Text>
              </View> */}
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('wallet.labelExchangeRate')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.payment.exchangeRate ?? "-"}</TextView>
              </View>
              {/* <View style={styles.formRow}>
                <Text style={styles.label}>{$t('wallet.labelPreviousBalance')}</Text>
                <Text style={styles.text}>{this.getSummaryText(this.state.summaryInfo.previousBalance)}</Text>
              </View> */}
              <View style={styles.formRow}>
                <TextView style={styles.label}>{$t('wallet.labelResultingBalance')}</TextView>
                <TextView style={styles.text}>{this.state.summaryInfo.payment.resultingBalance ?? "-"}</TextView>
              </View>
            </View>
          }
          { (this.state.isActully && utils.isNotEmpty(this.state.summaryInfo.top)) &&
            <View style={styles.bottomButton}>
              <TextView
                style={styles.feedback}
                onPress={() => startPage(PageList.feedback)}>{$t('wallet.linkSubmitFeedback')}</TextView>
              {/* <Text style={styles.tipText}>{$t('wallet.tipsReceipt')}</Text> */}
              <Button
                text={$t('home.done')}
                elevation={1.5}
                onClick={() => this.toRating()}/>
            </View>
          }
        </ScrollView>
      );
    }
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingLeft: 16,
    paddingRight: 16,
    backgroundColor: colorLight
  },
  headerView: {
    alignItems: 'center',
    paddingTop: 16,
    paddingBottom: 24
  },
  topTitle: {
    color: textPrimary,
    fontSize: 16,
    marginTop: 8,
    paddingLeft: 8,
    fontWeight: 'bold'
  },
  topDesc: {
    color: textPrimary,
    fontSize: 14,
    marginBottom: 32
  },
  sections: {
    borderRadius: 10,
    marginBottom: 12,
    backgroundColor: colorLight
  },
  sections2: {
    paddingTop: 0,
    paddingLeft: 0,
    paddingRight: 0,
    paddingBottom: 8,
    borderRadius: 10,
    marginBottom: 8,
    backgroundColor: colorLight
  },
  formTitle: {
    color: '#000',
    fontSize: 14,
    marginTop: -4,
    marginBottom: 6,
    paddingBottom: 6,
    fontWeight: 'bold',
    borderBottomWidth: 1,
    borderBottomColor: textPrimary
  },
  formRow: {
    paddingTop: 3,
    paddingBottom: 3,
    alignItems: 'center',
    flexDirection: 'row'
  },
  label: {
    flex: 1,
    color: textPrimary,
    fontSize: 13,
  },
  text: {
    color: textPrimary,
    fontSize: 12,
    fontWeight: 'bold'
  },
  stationInfoView: {
    padding: 12,
    marginBottom: 0,
    alignItems: 'center',
    flexDirection: 'row',
    justifyContent: 'space-between'
  },
  stationInfoText: {
    color: '#999',
    fontSize: 11
  },
  connectorView: {
    alignItems: 'center',
    flexDirection: 'row'
  },
  typeIcon: {
    width: 36,
    height: 36
  },
  feedback: {
    color: '#12A5F9',
    fontSize: 14,
    textAlign: 'center',
    marginBottom: 16,
    ...ui.underline
  },
  bottomButton: {
    marginTop: 32,
    marginBottom: 16
  },
  tipText: {
    color: textPrimary,
    fontSize: 12,
    textAlign: 'center',
    marginBottom: 8
  },
  processContent: {
    flex: 1,
    justifyContent: 'center'
  },
  processTitle: {
    color: textTitle,
    fontSize: 24,
    fontWeight: 'bold',
    textAlign: 'center'
  },
  processText: {
    color: textPrimary,
    fontSize: 14,
    textAlign: 'center',
    paddingTop: 16
  }
});
