{% extends "base.html" %}

{% block title %}{{ trip.title }} ({{ display_date(trip.start) }}) - Edward Betts{% endblock %}

{% from "macros.html" import trip_link, display_datetime, display_date_no_year, display_date, conference_row, accommodation_row, flight_row, train_row with context %}

{% set row = { "flight": flight_row, "train": train_row } %}

{% macro next_and_previous() %}
  <p>
    {% if prev_trip %}
      previous: {{ trip_link(prev_trip) }} ({{ (trip.start - prev_trip.end).days }} days)
    {% endif %}
    {% if next_trip %}
      next: {{ trip_link(next_trip) }} ({{ (next_trip.start - trip.end).days }} days)
    {% endif %}
  </p>
{% endmacro %}

{% block style %}

{% if coordinates %}
 <link rel="stylesheet" href="{{ url_for("static", filename="leaflet/leaflet.css") }}">
{% endif %}

{% set conference_column_count = 7 %}
{% set accommodation_column_count = 7 %}
{% set travel_column_count = 9 %}
<style>
.conferences {
  display: grid;
  grid-template-columns: repeat({{ conference_column_count }}, auto); /* 7 columns for each piece of information */
  gap: 10px;
  justify-content: start;
}

.accommodation {
  display: grid;
  grid-template-columns: repeat({{ accommodation_column_count }}, auto);
  gap: 10px;
  justify-content: start;
}

.travel {
  display: grid;
  grid-template-columns: repeat({{ travel_column_count }}, auto);
  gap: 10px;
  justify-content: start;
}

.grid-item {
  /* Additional styling for grid items can go here */
}

#map {
  height: 90vh;
}

</style>
{% endblock %}

{% set end = trip.end %}
{% set total_distance = trip.total_distance() %}
{% set distances_by_transport_type = trip.distances_by_transport_type() %}

{% block content %}
<div class="row">
  <div class="col-md-6 col-sm-12">
    <div class="m-3">
    {{ next_and_previous() }}
    <h1>{{ trip.title }}</h1>
    <p class="lead">
    {% if end %}
      {{ display_date_no_year(trip.start) }} to {{ display_date_no_year(end) }}
      ({{ (end - trip.start).days }} nights)
    {% else %}
      {{ display_date_no_year(trip.start) }} (end date missing)
    {% endif %}
    </p>

    <div class="mb-3">
    {# <div>Countries: {{ trip.countries_str }}</div> #}
    <div>Locations: {{ trip.locations_str }}</div>

    {% if total_distance %}
      <div>Total distance:
      {{ "{:,.0f} km / {:,.0f} miles".format(total_distance, total_distance / 1.60934) }}
      </div>
    {% endif %}

    {% if distances_by_transport_type %}
      {% for transport_type, distance in distances_by_transport_type %}
        <div>{{ transport_type | title }} distance:
          {{ "{:,.0f} km / {:,.0f} miles".format(distance, distance / 1.60934) }}
        </div>
      {% endfor %}
    {% endif %}


    {% set delta = human_readable_delta(trip.start) %}
    {% if delta %}
      <div>How long until trip: {{ delta }}</div>
    {% endif %}
    </div>

    {% for item in trip.conferences %}
      {% set country = get_country(item.country) if item.country else None %}
      <div class="card my-1">
        <div class="card-body">
          <h5 class="card-title">
            <a href="{{ item.url }}">{{ item.name }}</a>
            <small class="text-muted">
              {{ display_date_no_year(item.start) }} to {{ display_date_no_year(item.end) }}
            </small>
          </h5>
          <p class="card-text">
            <strong>Topic:</strong> {{ item.topic }}
            <strong>Venue:</strong> {{ item.venue }}
            <strong>Location:</strong>  {{ item.location }}
            {% if country %}
              {{ country.flag }}
            {% elif item.online %}
              πŸ’» Online
            {% else %}
              <span class="text-bg-danger p-2">
                country code <strong>{{ item.country }}</strong> not found
              </span>
            {% endif %}
            {% if item.free %}
              <span class="badge bg-success text-nowrap">free to attend</span>
            {% elif item.price and item.currency %}
              <span class="badge bg-info text-nowrap">price: {{ item.price }} {{ item.currency }}</span>
            {% endif %}
          </p>
        </div>
      </div>
    {% endfor %}

    {% for item in trip.accommodation %}
      {% set country = get_country(item.country) if item.country else None %}
      {% set nights = (item.to.date() - item.from.date()).days %}
      <div class="card my-1">
        <div class="card-body">
          <h5 class="card-title">
            {% if item.operator %}{{ item.operator }}: {% endif %}
            <a href="{{ item.url }}">{{ item.name }}</a>
            <small class="text-muted">
              {{ display_date_no_year(item.from) }} to {{ display_date_no_year(item.to) }}
              ({% if nights == 1 %}1 night{% else %}{{ nights }} nights{% endif %})
            </small>
          </h5>
          <p class="card-text">
            <strong>Address:</strong> {{ item.address }}
            <strong>Location:</strong> {{ item.location }}
            {% if country %}
              {{ country.flag }}
            {% else %}
              <span class="text-bg-danger p-2">
                country code <strong>{{ item.country }}</strong> not found
              </span>
            {% endif %}
            {% if g.user.is_authenticated and item.price and item.currency %}
              <span class="badge bg-info text-nowrap">price: {{ item.price }} {{ item.currency }}</span>
            {% endif %}
          </p>
        </div>
      </div>
    {% endfor %}

    {% if trip.flight_bookings %}
    <h3>Flight bookings</h3>
    {% for item in trip.flight_bookings %}
      <div>
        {{ item.flights | map(attribute="airline_name") | unique | join(" + ") }}
        {% if g.user.is_authenticated and item.booking_reference %}
          <strong>booking reference:</strong> {{ item.booking_reference }}
        {% endif %}
        {% if g.user.is_authenticated and item.price and item.currency %}
          <span class="badge bg-info text-nowrap">price: {{ item.price }} {{ item.currency }}</span>
        {% endif %}
      </div>
    {% endfor %}
    {% endif %}

    {% for item in trip.events %}
      {% set country = get_country(item.country) if item.country else None %}
      <div class="card my-1">
        <div class="card-body">
          <h5 class="card-title">
            <a href="{{ item.url }}">{{ item.title }}</a>
            <small class="text-muted">{{ display_date_no_year(item.date) }}</small>
          </h5>
          <p class="card-text">
            Address: {{ item.address }}
            | Location: {{ item.location }}
            {% if country %}
              {{ country.flag }}
            {% else %}
              <span class="text-bg-danger p-2">
                country code <strong>{{ item.country }}</strong> not found
              </span>
            {% endif %}
            {% if g.user.is_authenticated and item.price and item.currency %}
              | <span class="badge bg-info text-nowrap">price: {{ item.price }} {{ item.currency }}</span>
            {% endif %}
          </p>
        </div>
      </div>
    {% endfor %}

    {% for item in trip.travel %}
      <div class="card my-1">
        <div class="card-body">
          <h5 class="card-title">
            {% if item.type == "flight" %}
              ✈️
              {{ item.from_airport.name }} ({{ item.from_airport.iata}})
              &rarr;
              {{ item.to_airport.name }} ({{item.to_airport.iata}})
            {% elif item.type == "train" %}
              πŸš†
              {{ item.from }}
              &rarr;
              {{ item.to }}
            {% endif %}
          </h5>
          <p class="card-text">
            {% if item.type == "flight" %}
              <div>
                <span>{{ item.airline_name }} ({{ item.airline }})</span>
                ✨
                {{ display_datetime(item.depart) }}
                {% if item.arrive %}
                &rarr;
                {{ item.arrive.strftime("%H:%M %z") }}
                <span>πŸ•’{{ ((item.arrive - item.depart).total_seconds() // 60) | int }} mins</span>
                {% endif %}
                ✨
                <span>{{ item.airline }}{{ item.flight_number }}</span>

                {% if item.distance %}
                  <span>
                    🌍distance:
                    {{ "{:,.0f} km / {:,.0f} miles".format(item.distance, item.distance / 1.60934) }}
                  </span>
                {% endif %}


              </div>
            {% elif item.type == "train" %}
              <div>
                {{ display_datetime(item.depart) }}
                &rarr;
                {{ item.arrive.strftime("%H:%M %z") }}
                {% if item.class %}
                  <span class="badge bg-info text-nowrap">{{ item.class }}</span>
                {% endif %}
                <span>πŸ•’{{ ((item.arrive - item.depart).total_seconds() // 60) | int }} mins</span>
                {% if item.distance %}
                  <span>
                    πŸ›€οΈ
                    {{ "{:,.0f} km / {:,.0f} miles".format(item.distance, item.distance / 1.60934) }}
                  </span>
                {% endif %}
              </div>
            {% endif %}
          </p>
        </div>
      </div>
    {% endfor %}

    <div class="mt-3">
    <h4>Holidays</h4>
    {% if holidays %}
      <table class="table table-hover w-auto">
      {% for item in holidays %}
        {% set country = get_country(item.country) %}
        <tr>
          {% if loop.first or item.date != loop.previtem.date %}
            <td class="text-end">{{ display_date(item.date) }}</td>
          {% else %}
            <td></td>
          {% endif %}
          <td>{{ country.flag }} {{ country.name }}</td>
          <td>{{ item.display_name }}</td>
        </tr>
      {% endfor %}
      </table>
    {% else %}
      <p>No public holidays during trip.</p>
    {% endif %}
    </div>

    {{ next_and_previous() }}

    </div>
  </div>
  <div class="col-md-6 col-sm-12">
    <div id="map"></div>
  </div>
</div>
{% endblock %}

{% block scripts %}

<script src="{{ url_for("static", filename="leaflet/leaflet.js") }}"></script>
<script src="{{ url_for("static", filename="leaflet-geodesic/leaflet.geodesic.umd.min.js") }}"></script>

<script src="{{ url_for("static", filename="js/map.js") }}"></script>

<script>
var coordinates = {{ coordinates | tojson }};
var routes = {{ routes | tojson }};

build_map("map", coordinates, routes);

</script>
{% endblock %}