<template>
  <v-container>
    <Header />

    <p>user logged in: {{ user.login }}</p>

    <v-expansion-panel>
      <v-expansion-panel-content v-for="deck in decks" :key="deck.id">
        <template v-slot:header>
          <div>{{ deck.content.name }}</div>
        </template>
        <v-card>
          <v-card-text>
            {{ deck.content.note }}
            <ul>
              <li v-for="card in deck.content.cards" :key="card.serial">
                {{ card.serial }}: {{ cardsdb[card.serial].name }}
              </li>
            </ul>
          </v-card-text>
        </v-card>
      </v-expansion-panel-content>
    </v-expansion-panel>

    <v-btn @click.native="logout">Logout</v-btn>
  </v-container>
</template>

<script>
import * as Cookies from 'js-cookie'
import axios from '@/plugins/axios'
import CardsDB from '@/plugins/ffdecks'

import Header from '@/components/Header.vue'

export default {
  name: 'UserCP',

  components: {
    Header
  },

  data: () => ({
    user: '',
    decks: ''
  }),

  methods: {
    goHome() {
      Cookies.remove('session')
      this.$router.push({ name: 'home' })
    },

    logout() {
      axios
        .post('/user/logout', {
          session: Cookies.get('session')
        })
        .then(response => {
          if (response.data.success) {
            this.goHome()
          }
        })
    },

    parseDecklist() {
      let fileContent = `--Generated By FF Decks (www.ffdecks.com)--
Deck Name: Ashe turbo
Created by: hawks1997


Forward(26):
3 Garland (6-002)
3 Rain (8-134)
3 Garnet (3-129)
2 Zidane (8-115)
3 Ashe (2-121)
3 Basch (2-014)
3 Steiner (4-129)
3 Vivi (3-017)
3 Cecil (2-129)

Summon(8):
2 Cuchulainn, the Impure (2-133)
2 Bahamut (4-016)
1 Phoenix (5-019)
3 Leviathan (6-125)

Backup(16):
2 Sage (2-005)
2 Vermilion Bird l'Cie Caetuna (6-010)
2 Yotsuyu (8-020)
2 Rasler (5-166)
2 Red Mage (1-003)
3 Hilda (6-122)
3 Astrologian (2-130)

Monster(0):`

      // select the line containing 'deck name:'
      // and its successor
      let metaRE = /^deck name: (.+)$[\s]*?^(.+)$/im
      let metaData = metaRE.exec(fileContent)

      // extract matches
      let deckData = {
        name: metaData[1],
        note: metaData[2],
        cards: []
      }

      // select all lines containing card serial numbers
      let cardLinesRE = /^.*\b\d-\d{3}[A-Z]?\b.*$/gm
      let cardLines = fileContent.match(cardLinesRE)

      cardLines.forEach(cardLine => {
        // extract serial (guaranteed to be in here!)
        let serialRE = /\b(\d-\d{3})[A-Z]?\b/i
        let serial = serialRE.exec(cardLine)[1]

        // strip out serial number
        cardLine = cardLine.replace(serialRE, '')

        let countREs = [
          // prioritize a count with "times" symbol *, x, ×
          /\b([1-3])(?:[*×]|[x]\b)/,
          /(?:[*×]|\b[x])([1-3])\b/,
          // next priority: with whitespace
          /\s+([1-3])\s+/,
          /\s+([1-3])\b/,
          /\b([1-3])\s+/,
          // least priority: any single digit
          /\b([1-3])\b/
        ]

        // fallback value
        let count = '0'
        for (let i = 0; i < countREs.length; i++) {
          let data = countREs[i].exec(cardLine)

          if (data) {
            count = data[1]
            break
          }
        }

        // push card data into deck
        deckData.cards.push({
          serial: serial,
          count: count
        })
      })

      console.log(deckData)
    }
  },

  computed: {
    cardsdb: () => CardsDB
  },

  mounted() {
    this.parseDecklist()

    axios
      .post('/user/info', {
        session: Cookies.get('session')
      })
      .then(response => {
        if (response.data.success) {
          this.user = response.data.user
        } else {
          this.goHome()
        }
      })
    axios
      .post('/decks/list', {
        session: Cookies.get('session')
      })
      .then(response => {
        if (response.data.success) {
          this.decks = response.data.decks
        }
      })
  }
}
</script>
