<template>
  <div>
    <v-toolbar dark>
      <v-spacer />
      <v-toolbar-title>콘텐츠 정산</v-toolbar-title>
      <v-spacer />
    </v-toolbar>

    <br>

    <v-container>
      <v-row>
        <v-col cols="2">
          <datetime
            v-model="start_date"
            class="datepicker"
            format="YYYY-MM-DD"
          />
        </v-col>

        <v-col cols="1">
          ~
        </v-col>

        <v-col cols="2">
          <datetime
            v-model="end_date"
            class="datepicker"
            format="YYYY-MM-DD"
          />
        </v-col>

        <v-col cols="1" />

        <v-col cols="2">
          <v-btn
            block
            color="#9970ff"
            dark
            depressed
            @click="getCalculateContentDonation"
          >
            조회
          </v-btn>
        </v-col>


        <v-spacer />

        <v-col cols="2">
          <vue-excel-xlsx
            :data="items"
            :columns="columns"
            :file-name="'정산'"
            :file-type="'xlsx'"
            :sheet-name="'정산'"
          >
            <v-btn
              block
              color="#9970ff"
              dark
              depressed
            >
              엑셀 다운로드
            </v-btn>
          </vue-excel-xlsx>
        </v-col>
      </v-row>
      <v-row>
        <v-col>
          <v-data-table
            :headers="headers"
            :items="items"
            :loading="is_loading"
            :items-per-page="-1"
            class="elevation-1"
            hide-default-footer
          >
            <template slot="body.prepend">
              <tr>
                <td colspan="4">
                  합계
                </td>
                <td>{{ sumField('numberOfDonation').toLocaleString() }}</td>
                <td>{{ sumField('totalCan').toLocaleString() }} 캔</td>
                <td>{{ sumField('totalKrw').toLocaleString() }} 원</td>
                <td>{{ sumField('paymentFee').toLocaleString() }} 원</td>
                <td>{{ sumField('settlementAmount').toLocaleString() }} 원</td>
                <td>{{ sumField('tax').toLocaleString() }} 원</td>
                <td>{{ sumField('depositAmount').toLocaleString() }} 원</td>
                <td />
              </tr>
            </template>

            <template v-slot:item.totalCan="{ item }">
              {{ item.totalCan.toLocaleString() }} 캔
            </template>

            <template v-slot:item.totalKrw="{ item }">
              {{ item.totalKrw.toLocaleString() }} 원
            </template>

            <template v-slot:item.paymentFee="{ item }">
              {{ item.paymentFee.toLocaleString() }} 원
            </template>

            <template v-slot:item.settlementAmount="{ item }">
              {{ item.settlementAmount.toLocaleString() }} 원
            </template>

            <template v-slot:item.tax="{ item }">
              {{ item.tax.toLocaleString() }} 원
            </template>

            <template v-slot:item.depositAmount="{ item }">
              {{ item.depositAmount.toLocaleString() }} 원
            </template>
          </v-data-table>
        </v-col>
      </v-row>
    </v-container>
  </div>
</template>

<script>
import * as api from "@/api/calculate";
import datetime from "vuejs-datetimepicker";

export default {
  name: "CalculateContentDonation",
  components: {datetime},

  data() {
    return {
      is_loading: false,
      start_date: null,
      end_date: null,
      items: [],
      columns: [
        {
          label: '후원날짜',
          field: 'donationDate',
        },
        {
          label: '크리에이터',
          field: 'nickname',
        },
        {
          label: '콘텐츠 제목',
          field: 'title',
        },
        {
          label: '구분',
          field: 'paidOrFree',
        },
        {
          label: '후원수',
          field: 'numberOfDonation',
        },
        {
          label: '합계(캔)',
          field: 'totalCan',
        },
        {
          label: '원화',
          field: 'totalKrw',
        },
        {
          label: '수수료\n(6.6%)',
          field: 'paymentFee',
        },
        {
          label: '정산금액',
          field: 'settlementAmount',
        },
        {
          label: '원천세\n(3.3%)',
          field: 'tax',
        },
        {
          label: '입금액',
          field: 'depositAmount',
        },
        {
          label: '콘텐츠 등록일',
          field: 'registrationDate',
        },
      ],
      headers: [
        {
          text: '후원날짜',
          align: 'center',
          sortable: false,
          value: 'donationDate',
        },
        {
          text: '크리에이터',
          align: 'center',
          sortable: false,
          value: 'nickname',
        },
        {
          text: '콘텐츠 제목',
          sortable: false,
          value: 'title',
          align: 'center',
          width: "300px"
        },
        {
          text: '구분',
          sortable: false,
          value: 'paidOrFree',
          align: 'center'
        },
        {
          text: '후원수',
          align: 'center',
          sortable: false,
          value: 'numberOfDonation',
        },
        {
          text: '합계(캔)',
          align: 'center',
          sortable: false,
          value: 'totalCan',
        },
        {
          text: '원화',
          align: 'center',
          sortable: false,
          value: 'totalKrw',
        },
        {
          text: '수수료\n(6.6%)',
          align: 'center',
          sortable: false,
          value: 'paymentFee',
        },
        {
          text: '정산금액',
          align: 'center',
          sortable: false,
          value: 'settlementAmount',
        },
        {
          text: '원천세\n(3.3%)',
          align: 'center',
          sortable: false,
          value: 'tax',
        },
        {
          text: '입금액',
          align: 'center',
          sortable: false,
          value: 'depositAmount',
        },
        {
          text: '콘텐츠 등록일',
          align: 'center',
          sortable: false,
          value: 'registrationDate',
        },
      ],
    }
  },

  async created() {
    const date = new Date();
    const firstDate = new Date(date.getFullYear(), date.getMonth(), 1);
    const lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);

    let firstDateMonth = (firstDate.getMonth() + 1).toString()
    if (firstDateMonth.length < 2) {
      firstDateMonth = '0' + firstDateMonth
    }


    let lastDateMonth = (lastDate.getMonth() + 1).toString()
    if (lastDateMonth.length < 2) {
      lastDateMonth = '0' + lastDateMonth
    }

    this.start_date = firstDate.getFullYear() + '-' + firstDateMonth + '-0' + firstDate.getDate()
    this.end_date = lastDate.getFullYear() + '-' + lastDateMonth + '-' + lastDate.getDate()

    await this.getCalculateContentDonation();
  },

  methods: {
    notifyError(message) {
      this.$dialog.notify.error(message)
    },

    notifySuccess(message) {
      this.$dialog.notify.success(message)
    },

    sumField(key) {
      return this.items.reduce((a, b) => a + (b[key] || 0), 0)
    },

    async getCalculateContentDonation() {
      this.is_loading = true

      try {
        const res = await api.getCalculateContentDonation(this.start_date, this.end_date)
        if (res.status === 200 && res.data.success === true) {
          this.items = res.data.data
        } else {
          this.notifyError(res.data.message || '알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
        }

        this.is_loading = false
      } catch (e) {
        this.notifyError('알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
        this.is_loading = false
      }
    }
  }
}
</script>
