<template>
  <div class="app-container">
    <el-form
      :model="filter.pageVo"
      class="filter-container"
      label-position="right">
      <div class="filter-view">
        <el-form-item>
          <el-input
            clearable
            v-model="filter.pageVo.criteria"
            placeholder="Search by Number/Email"
            @keyup.enter.native="getTableData" />
        </el-form-item>
        <el-form-item>
          <el-date-picker
            v-model="filter.pageVo.date"
            type="month"
            format="yyyy-MM"
            value-format="yyyy-MM"
            placeholder="Filter Date"/>
        </el-form-item>
        <el-form-item>
          <el-select
            filterable
            remote
            clearable
            v-model="filter.pageVo.sitePk"
            :remote-method="(s) => getSiteOptions(s)"
            placeholder="Filter by site"
            @change="getStationOptions">
            <el-option
              v-for="(item, index) in siteOptions"
              :key="index"
              :label="item.siteName"
              :value="item.sitePk"/>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-select
            clearable
            v-model="filter.pageVo.chargeBoxId"
            placeholder="Filter by Station ID"
            v-loading="listLoading">
            <el-option
              v-for="(item, index) in stationOptions"
              :key="index"
              :label="item.stationId"
              :value="item.stationId"/>
          </el-select>
        </el-form-item>
        <el-button
          type="primary"
          icon="el-icon-search"
          @click="getTableData">
          Search
        </el-button>
      </div>
    </el-form>
    <el-table
      :data="table.list"
      v-loading="loading">
      <el-table-column
        label="Transaction ID"
        align="center"
        prop="transactionPk"/>
      <el-table-column
        label="Site Name"
        align="center"
        prop="siteName"/>
      <el-table-column
        label="Station ID"
        align="center"
        prop="chargingPk"/>
      <el-table-column
        label="Start Date/Time"
        align="center"
        prop="startDateTime"/>
      <el-table-column
        label="End Date/Time"
        align="center"
        prop="endDateTime"/>
      <el-table-column
        label="Power (kwh)"
        align="center"
        prop="power"/>
      <el-table-column
        label="Rate"
        align="center"
        prop="rate"/>
      <el-table-column
        label="Charges"
        align="center"
        prop="charges"/>
    </el-table>
    <div class="right">
      <Pagination
        v-show="table.total > 0"
        :total="table.total"
        :page.sync="filter.pageNo"
        :limit.sync="filter.pageSize"
        @pagination="getTableData" />
    </div>
  </div>
</template>

<script>
import site from '@/http/api/site'
import ocpp from '@/http/api/ocpp'
import financial from '@/http/api/financial'
import Pagination from '@/components/Pagination'
export default {
  data() {
    return {
      loading: false,
      listLoading: false,
      siteOptions: [],
      stationOptions: [],
      table: {
        list: [],
        total: 0
      },
      filter: {
        pageNo: 1,
        pageSize: 10,
        pageVo: {
          date: "",
          sitePk: "",
          criteria: "",
          chargeBoxId: ""
        }
      },
    }
  },
  components: { Pagination },
  created() {
    this.getSiteOptions()
    this.getTableData()
  },
  methods: {
    getSiteOptions(search) {
      site.getAllSiteList({siteName: search ?? ""}).then(res => {
        if (res.data && res.data.length > 0) {
          this.siteOptions = res.data
        }
      });
    },
    getStationOptions() {
      this.listLoading = true;
      ocpp.getStationPages({
        pageNo: 1,
        pageSize: 20,
        pageVo: {
          date: "",
          sitePk: this.filter.pageVo.sitePk
        }
      }).then(res => {
        if (res.data) {
          this.stationOptions = res.data;
        }
      }).finally(() => {
        this.listLoading = false;
      })
    },
    getTableData() {
      this.loading = true;
      financial.getTransactionsPages(this.filter).then(res => {
        this.loading = false;
        if (res.data) {
          this.table.total = res.total
          this.table.list = res.data
        }
      }).catch(err => {
        this.loading = false;
        this.$message({
          message: err,
          type: 'error'
        })
      })
    }
  }
}
</script>

<style>
  
</style>