{% extends 'base.html.twig' %}

{% block title %}
  LeafOS Wiki
{% endblock %}

{% block body %}
  {% include '@components/aside.html.twig' %}
  <article>
    <div class="banner">
      <div class="container">
        <h1>
          LeafOS for
          {{ device.vendor }}
          {{ device.name }}
        </h1>
      </div>
    </div>

    <div class="container">
      <div class="device-info">
        <div class="instructions">
          <h2>Downloads</h2>
          <h3>Latest builds</h3>
          <hr />
          <div class="latest-builds">
            {% for build in downloads.latestBuilds %}
              {% if build %}
              <div class="build-card">
                <div class="title">{{ build.flavor }}</div>
                <div class="build-info">
                  <table>
                    <tbody>
                      <tr>
                        <td>Build Date</td>
                        <td>{{ build.datetime|date('d/m/Y') }}</td>
                      </tr>
                      <tr>
                        <td>LeafOS Version</td>
                        <td>{{ build.version }}</td>
                      </tr>
                      <tr>
                        <td>Flavor</td>
                        <td>{{ build.flavor }}</td>
                      </tr>
                      <tr>
                        <td>File size</td>
                        <td>{{ build.size|human_readable_format }}</td>
                      </tr>
                      <tr>
                        <td>
                          <a href="{{ build.url }}" class="button">Full build</a>
                        </td>
                        {% if '_gsi_' not in device.codename %}
                        <td>
                          <a href="{{ build.recoveryUrl }}" class="button">Recovery</a>
                        </td>
                        {% endif %}
                      </tr>
                    </tbody>
                  </table>
                </div>
              </div>
              {% endif %}
            {% endfor %}
          </div>
        </div>
        <div class="specs">
          <div class="heading">
            <h2>
              {{ device.vendor }}
              {{ device.name }}
            </h2>
            <p>Released
              {{ device.release|date('d/m/Y') }}</p>
          </div>
          <img src="{{ asset('assets/images/devices/' ~ device.image) }}" alt="{{ device.name }}" />
          <table>
            <tbody>
              <tr>
                <td>SoC</td>
                <td>{{ device.soc }}
                  ({{ device.architecture }})</td>
              </tr>
              {% if device.cpu is defined %}
              <tr>
                <td>CPU</td>
                <td>
                  <p>{{ device.cpu_cores }}
                    cores
                    {{ device.cpu }}</p>
                  <p>{{ device.cpu_freq }}</p>
                </td>
              </tr>
              {% endif %}
              {% if device.gpu is defined %}
              <tr>
                <td>GPU</td>
                <td>{{ device.gpu }}</td>
              </tr>
              {% endif %}
              {% if device.ram is defined %}
              <tr>
                <td>RAM</td>
                <td>{{ device.ram }}</td>
              </tr>
              {% endif %}
              {% if device.storage is defined %}
              <tr>
                <td>Storage</td>
                <td>
                  <p>{{ device.storage }}</p>
                  {% if device.sdcard is defined %}
                    <p>SD card slot up to
                      {{ device.sdcard.sizeMax }}</p>
                  {% endif %}
                </td>
              </tr>
              {% endif %}
              {% if device.screen is defined %}
              <tr>
                <td>Screen</td>
                <td>
                  <ul>
                    <li>{{ device.screen.size }}</li>
                    <li>{{ device.screen.resolution }}</li>
                    <li>{{ device.screen.technology }}</li>
                  </ul>
                </td>
              </tr>
              {% endif %}
              {% if device.battery is defined %}
              <tr>
                <td>Battery</td>
                <td colspan="2">{{ device.battery.removable ? 'Removable' : 'Non-removable' }}
                  {{ device.battery.tech }}
                  {{ device.battery.capacity }}
                  mAh</td>
              </tr>
              {% endif %}
              {% if device.cameras is defined %}
              <tr>
                <td>Cameras</td>
                <td>
                  <ul>
                    {% for camera in device.cameras %}
                      <li>{{ camera.info }}
                        {{ camera.flash != 'None' ? ', ' ~ camera.flash ~ ' flash' : '' }}</li>
                    {% endfor %}
                  </ul>
                </td>
              </tr>
              {% endif %}
              {% if device.network is defined %}
              <tr>
                <td>Network</td>
                <td>
                  <ul>
                    {% for network in device.network %}
                      <li>{{ network }}</li>
                    {% endfor %}
                  </ul>
                </td>
              </tr>
              {% endif %}
              {% if device.wifi is defined %}
              <tr>
                <td>WiFi</td>
                <td>{{ device.wifi }}</td>
              </tr>
              {% endif %}
              {% if device.bluetooth is defined %}
              <tr>
                <td>Bluetooth</td>
                <td>
                  {{ device.bluetooth.spec }}
                  {% if device.bluetooth.profiles is defined and device.bluetooth.profiles is not empty %}
                    with{% for profile in device.bluetooth.profiles %}
                      {{ profile }}
                    {% endfor %}
                  {% endif %}
                </td>
              </tr>
              {% endif %}
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </article>
{% endblock %}
