<template>
  <div class="container is-fullwidth">
    <div class="loading" v-if="loading">
      <Loading />
    </div>
    <div class v-else>
      <!-- Profile Cover Modal -->
      <Modal
        title="Change Cover"
        :isActive="showCoverModal"
        acceptText="Change"
        rejectText="Cancel"
        @accept="changeCover()"
        @close="showCoverModal=false"
      >
        <ProfileHeader
          :title="user.name"
          :background="childCoverModalImage ? childCoverModalImage : user.profile_cover"
        />
        <file-select v-model="childCoverModalImage" accept="image/*" lable="Select Cover:"></file-select>
      </Modal>

      <!-- Create Call Modal -->
      <ConfigureNewCallModal
        @newCall="makeCall($event)"
        @dismiss="showCreateCallModal=false"
        :isActive="showCreateCallModal"
      />
      <!-- Profile -->
      <ProfileHeader :title="user.name" :background="user.profile_cover" />
      <div class="columns is-fullheight m-t-md">
        <div class="column is-3">
          <div class="card">
            <div class="card-image">
              <figure class="image is-4by4 p-md">
                <img :src="user.avatar" class="is-rounded is-avatar" />
              </figure>
            </div>
            <div class="card-content">
              <div v-if="!![...user.connections.children, ...user.connections.connections].length">
                <p class="card-header-title">Connections</p>
                <ChildCard
                  v-for="child in [...user.connections.children, ...user.connections.connections]"
                  :key="child.id"
                  :child="child"
                ></ChildCard>
                <br />
              </div>
            </div>
          </div>
        </div>
        <div class="column">
          <div class="card">
            <div class="card-content">
              <nav class="level">
                <!-- Left side -->
                <div class="level-left">
                  <div class="level-item">
                    <h1 class="title">{{`${user.name.split(' ')[0]}'s Room`}}</h1>
                  </div>
                </div>

                <!-- Right side -->
                <div class="level-right">
                  <div class="level-item">
                    <button class="button" @click="onAddClicked()">
                      <i class="fa fa-fw fa-plus"></i> Add
                    </button>
                    <button class="button is-success m-l-md" @click="showCreateCallModal=true">
                      <i class="fa fa-fw fa-phone"></i> Call
                    </button>
                  </div>
                </div>
              </nav>
              <div class="Books">
                <h2 class="subtitle">
                  <i class="fa fa-fw fa-book"></i> My Books
                </h2>
                <div class="is-flex m-b-md">
                  <div class="book-thumb m-l-md" v-for="book in user.books" :key="book.id">
                    <div class="book-cover">
                      <figure class="image is-2by3 m-a">
                        <img :src="`/u/books/${book.id}/thumbnail`" />
                      </figure>
                    </div>
                    <div class="book-text">
                      <div>{{book.title}}</div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script lang="ts">
import { mapActions, mapGetters } from "vuex";
import ChildCard from "../components/Child_Card.vue";
import Services from "../../services/index";
import Loading from "../../shared/components/Loading/Loading.vue";
import ProfileHeader from "../components/ProfileHeader.vue";
import AddConnectionModal from "../components/AddConnectionModal.vue";
import ConfigureNewCallModal from "../components/ConfigureNewCallModal.vue";
import FileSelect from "../../shared/components/FileSelect/FileSelect.vue";
import AvatarBadge from "../components/AvatarBadge.vue";
import Moment from "moment";
import Modal from "../../shared/components/Modal/Modal.vue";
export default {
  name: "Home",
  components: {
    Loading,
    ProfileHeader,
    Modal,
    FileSelect,
    AvatarBadge,
    AddConnectionModal,
    ConfigureNewCallModal,
    ChildCard
  },
  beforeCreate() {},
  async created() {
    this.loading = false;
    return true;
  },
  data() {
    return {
      loading: true,
      child: null,
      isParent: false,
      inEditMode: false,
      showCoverModal: false,
      showCreateCallModal: false,
      showAddConnectionModal: false,
      childCoverModalImage: null
    };
  },
  methods: {
    onAddClicked() {
      this.notify({ message: "Add button clicked. Still not working" });
    },
    onDeleteClicked() {
      this.notify({ message: "Delete button clicked. Still not working" });
    },
    goChildProfile(connection) {
      this.$router.push({ path: `/child/${connection.id}` });
    },
    async makeCall(event) {
      try {
        const response = await Services.ApiService.createCall(event);
        this.notify({ message: `Connecting...` });
        this.$router.push({ path: `/call/${response.data.id}` });
      } catch (e) {
        console.error(e);
      }
      return true;
    },
    async changeCover() {
      if (this.childCoverModalImage) {
        this.loading = true;
        try {
          this.child.profile_cover = await Services.ApiService.updateChildCover(
            this.child.id,
            this.childCoverModalImage
          );
        } catch (error) {
          console.error(error);
        }
        this.loading = false;
      }
      this.showCoverModal = false;
      this.this.childCoverModalImage = null;
    },
    togleEditMode() {
      this.inEditMode = !this.inEditMode;
      if (this.inEditMode) {
        this.showCoverModal = true;
      }
    },
    ...mapActions(["getUser", "notify"])
  },
  computed: {
    age() {
      const years = Moment().diff(this.child.dob, "years");
      const months = Moment().diff(this.child.dob, "months") % 12;
      const isNewBorn = !years && !months;
      let text = "a new boarn!";
      if (!isNewBorn) {
        text = "";
        if (years) text += `${years} years`;
        if (years && months) text += ` and`;
        if (months) text += ` ${months} months`;
        text += " old";
      }
      return `${text}`;
    },
    ...mapGetters(["user"])
  }
};
</script>

