<template>
  <v-expansion-panel-content>
    <template v-slot:header>
      <span class="subheading">{{ deck.name }}</span>
    </template>

    <v-alert :value="deck.note" type="info">
      {{ deck.note }}
    </v-alert>

    <v-container grid-list-md fluid>
      <v-layout row wrap>
        <v-flex v-for="part in deck_parts" :key="part.heading" xs12 sm6 md4>
          <v-card>
            <v-card-title>{{ part.count }} {{ part.heading }}</v-card-title>
            <v-list dense subheader>
              <Card
                v-for="card in part.cards"
                :key="card.serial"
                :count="card.count"
                :serial="card.serial"
                :dbentry="card.dbentry"
              ></Card>
            </v-list>
          </v-card>
        </v-flex>
      </v-layout>
    </v-container>
  </v-expansion-panel-content>
</template>

<script>
import Card from './Card.vue'

export default {
  name: 'Deck',

  props: {
    deck: Object
  },

  components: {
    Card
  },

  computed: {
    deck_parts() {
      let retval = {
        forwards: {
          heading: 'Forwards',
          cards: this.deck.cards.filter(card => card.dbentry.type === 'Forward')
        },
        backups: {
          heading: 'Backups',
          cards: this.deck.cards.filter(card => card.dbentry.type === 'Backup')
        },
        rest: {
          heading: 'Summons, Monsters & more',
          cards: this.deck.cards.filter(
            card =>
              card.dbentry.type != 'Forward' && card.dbentry.type != 'Backup'
          )
        }
      }

      for (let i = 0; i < Object.keys(retval).length; i++) {
        let key = Object.keys(retval)[i]
        retval[key].count = retval[key].cards.reduce(
          (result, card) => result + card.count,
          0
        )
        retval[key].cards.sort(
          (card_l, card_r) => card_l.dbentry.cost - card_r.dbentry.cost
        )
      }

      return retval
    }
  }
}
</script>
