<script setup>
import { onMounted, onUpdated, ref } from 'vue';
import { SetupHandle, SetSize, SetPosition, ResetPosition } from '@/services/Windows';

import WindowHandle from '@/views/partials/WindowHandle.vue';
import PlayerList from '../../partials/PlayerList.vue';
import { Disconnect, DisplayToast, GetCampaign, GetClient } from '../../../services/Dragonroll';
import CampaignBookList from '../../partials/books/CampaignBookList.vue';
import { ClearAll, ClearWindow, CreateWindow } from '../../../services/Windows';
import { LaunchGame } from '../../../services/Game';
import { AddSound } from '../../../services/Sound';
import ChatComponent from '../../partials/ChatComponent.vue';
import GameSystem from '@/views/partials/GameSystem.vue'
import { GetModule } from '../../../services/Modules';

const handle = ref(null);

const props = defineProps(['data']);
const data = props.data;

const hide_start = ref(false);
const hide_chat = ref(false);
const campaign_title = ref(null);

const container = ref(null);

let id = data.id;
onMounted(() => {
    SetupHandle(id, handle);

    if(data.style == 'compact') {
        SetSize(id, {x: 800, y: 750});
        hide_chat.value = true;
    } else {
        SetSize(id, {x: 1200, y: 750});
    }
    
    ResetPosition(id, "center");

    hide_start.value = data.hide_start;

    AddSound(container.value)

    campaign_title.value.style.backgroundColor = GetModule(data.campaign.system).color ? GetModule(data.campaign.system).color : "#1f1f1f";
});

function CopyCode(){
    navigator.clipboard.writeText(GetCampaign().invite_code);
    DisplayToast('aqua', "Copied invite code successfully!", 1000);
}

function Launch(){
    ClearWindow('campaign_preview');
    LaunchGame();
}

function Exit(){
    Disconnect();
    ClearAll();
    CreateWindow('campaign_list');
}

</script>


<template>
    <div class="window-wrapper" :id="'window-wrapper-' + id">
        <WindowHandle :window="id" ref="handle"></WindowHandle>

        <!-- Body 
         <h1>{{ data.campaign.name }}</h1> -->

         <div class="campaign-preview-container" :class="hide_chat ? 'campaign-preview-compact' : ''" ref="container">
            <div class="campaign-preview-column left">
                <h2>Players</h2>
                <PlayerList :campaign="data.campaign"></PlayerList>
                <div class="buttons-row">
                    <button class="btn-primary button-row sound-click" v-on:click.prevent="CopyCode">Copy invite code</button>
                </div>
            </div>
            <div class="campaign-preview-column center">
                <h1 class="campaign-title" ref="campaign_title">{{ data.campaign.name }}</h1>
                <div class="campaign-main-container">
                    <div class="campaign-main-container-scroll">
                        <GameSystem :data="GetModule(data.campaign.system)"></GameSystem>
                        <h2>Books</h2>
                        <CampaignBookList class="small-book-list"></CampaignBookList>
                    </div>
                </div>
                <div class="buttons-row">
                    <button class="btn-primary button-row sound-click btn-green" v-if="!hide_start" v-on:click.prevent="Launch">Launch game</button>
                    <button class="btn-primary button-row sound-click btn-red" v-if="hide_start" v-on:click.prevent="Exit">Exit game</button>
                </div>
            </div>
            <div v-if="!hide_chat" class="campaign-preview-column right">
                <ChatComponent></ChatComponent>
            </div>
         </div>

    </div>
</template>


<style scoped lang="scss">
.small-book-list {
    margin: 20px;
    overflow: auto;
}

.campaign-main-container-scroll {
    overflow-y: scroll;
    height: 100%;
    max-height: 520px;
}


.campaign-main-container {
    height: 100%;
     h2 {
        text-align: left;
        margin-left: 20px;
        font-size: 28px;
    }

    overflow: auto;
}

.campaign-title {
    font-weight: normal;
    text-align: left;
    padding: 20px;
    margin-bottom: 30px;
}

.button-row {
    margin-bottom: 10px;
}

.campaign-preview-container {
    width: 100%;
    height: 100%;

    display: grid;
    grid-template-columns: 2fr 4fr 3fr;

    &.campaign-preview-compact {
        grid-template-columns: 2fr 4fr;
    }
}

.campaign-preview-column {
    display: flex;
    flex-direction: column;

    &.left {
        background-color: var(--color-background-soft);
    }

    &.center {
        background-color: var(--color-background-semisoft);

        display: flex;
    }

    &.right {
        background-color: var(--chat-background);
    }
}

.window-wrapper {
    display: flex;
    user-select: none;
    align-items: center;
}

h1, h2 {
    font-family: MrEavesRemake;
}

h1 {
    background-color: rgb(143, 39, 39);
}

</style>
