<script>
  import { fly } from 'svelte/transition';
  import { uuid } from '$lib/stores/uuid';
  import LoadingText from '$lib/navigation/loading-text.svelte';

  export let service = '';

  let isExpanded = false;

  async function getTrainByUID(tuid = '') {
    const url = `https://owlboard.info/api/v2/timetable/train/byTrainUid/${tuid}`;
    const options = {
      method: 'GET',
      headers: {
        uuid: $uuid
      }
    };
    const res = await fetch(url, options);
    if (res.status === 200) {
      return await res.json();
    } else {
      throw new Error('Unable to Fetch');
    }
  }

  async function expand() {
    isExpanded = !isExpanded;
  }
</script>

<!-- The next version of backend will only return a subset of information required to display the container-header
      , the container will then be responsible for fetching more data using the trainUid. -->
<div class="container">
  <div class="container-header" on:click={expand} on:keypress={expand}>
    <span class="header"
      >{service?.operator || ''}: {service?.stops[0]['publicDeparture'] || service?.stops[0]['wttDeparture']}
      {service?.stops[0]['tiploc']} to {service?.stops[service['stops'].length - 1]['tiploc']}</span
    >
    <span id="container-arrow" class:isExpanded>V</span>
  </div>
  {#if isExpanded}
    <div class="container-detail" in:fly={{ y: -20, duration: 200 }}>
      {#await getTrainByUID(service.trainUid)}
        <LoadingText />
      {:then serviceDetail}
        {#if serviceDetail.pis}
          <p class="pis">PIS: {serviceDetail.pis}</p>
        {/if}
        <p class="svc-detail">
          Planned Type: {parseInt(serviceDetail.planSpeed) || 68}mph {serviceDetail.powerType || 'Bus'}
        </p>
        <p class="svc-detail">
          Days Run: {serviceDetail.daysRun.join(', ').toUpperCase()}
        </p>
        <p class="svc-detail validity">
          Valid From: {new Date(serviceDetail.scheduleStartDate).toLocaleDateString('en-GB', {
            timeZone: 'UTC'
          })} - {new Date(serviceDetail.scheduleEndDate).toLocaleDateString('en-GB', {
            timeZone: 'UTC'
          })}
        </p>
        <table>
          <tr>
            <th>Location</th>
            <th>Sch Arr.</th>
            <th>Sch Dep.</th>
          </tr>
          {#if serviceDetail.stops[0]['publicDeparture']}
            {#each serviceDetail.stops as stop}
              {#if stop.publicArrival || stop.publicDeparture}
                <tr>
                  <td>{stop.tiploc}</td>
                  <td>{stop.publicArrival || '-'}</td>
                  <td>{stop.publicDeparture || '-'}</td>
                </tr>
              {/if}
            {/each}
          {:else}
            {#each serviceDetail.stops as stop}
              <tr>
                <td>{stop.tiploc}</td>
                <td>{stop.wttArrival || '-'}</td>
                <td>{stop.wttDeparture || '-'}</td>
              </tr>
            {/each}
          {/if}
        </table>
      {:catch}
        <p>Unable to fetch train data</p>
      {/await}
    </div>
  {/if}
</div>

<style>
  .container {
    position: relative;
    margin: auto;
    margin-bottom: 20px;
    width: 95%;
    max-width: 600px;
    height: auto;
    background-color: var(--overlay-color);
    border-radius: 10px;
    overflow: hidden;
    transition: height 500ms ease-in-out;
  }
  .container-header {
    text-align: left;
    padding-left: 10px;
    font-size: 14px;
    font-weight: 600;
    padding-top: 12px;
    padding-bottom: 10px;
  }
  #container-arrow {
    font-family: Arial, Helvetica, sans-serif;
    font-weight: 600;
    color: white;
    margin: 0;
    padding: 0;
    position: absolute;
    right: 16px;
    top: 13px;
    transition-duration: 300ms;
    z-index: 2;
  }
  .isExpanded {
    transform: rotate(180deg);
  }
  .pis {
    font-size: 18px;
    font-weight: 600;
    color: azure;
    margin-top: 10px;
    margin-bottom: 5px;
  }
  .svc-detail {
    margin-top: 2px;
    margin-bottom: 2px;
    color: white;
  }
  .validity {
    font-size: 14px;
  }
  table {
    margin: auto;
    padding-top: 10px;
    padding-bottom: 10px;
    color: white;
  }
</style>
