<?php

class PageNewRide extends Page
{
  function Show(): string
  {
    if (!array_key_exists('step', $_GET))
    {
      $Output = '<script>
function insertAfter(referenceNode, newNode)
{
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

function add_before(name)
{
    var objTo = document.getElementById(name)
    var divtest = document.createElement("div");
    divtest.innerHTML = \'<tr><td>Zastávka:</td><td><input type="text" name="ridestop1"/></td></tr>\';

    objTo.parentNode.insertBefore(divtest, objTo.childNodes[0])
}

function add_after(name)
{
    var objTo = document.getElementById(name)
    var divtest = document.createElement("div");
    divtest.innerHTML = \'<tr><td>Zastávka:</td><td><input type="text" name="ridestop1"/></td></tr>\';

    insertAfter(objTo, divtest)
}
          </script>'.
        '<form method="get" action="'.$this->System->Link('/nova-jizda/').'">'.
        '<table>'.
        '<tr><td colspan="2"><strong>Trasa:</strong></td></tr>'.

        '<tr><td>Počátek:</td><td><input type="text" name="from"/></td></tr>'.
        '<tr><td>Zastávka:</td><td><input type="text" name="middle"/></td></tr>'.
        '<tr><td>Konec:</td><td><input type="text" name="to"/></td></tr>'.

        '<tr><td colspan="2"><br><strong>Parametry jízdy:</strong></td></tr>'.
        '<tr><td>Čas odjezdu:</td><td><input type="text" name="time-from"/></td></tr>'.
        '<tr><td>Počet míst pro cestující:</td><td><input type="text" name="seats"/></td></tr>'.
        '</table>'.
        '<input type="hidden" name="step" value="2"/><br/>'.
        '<input type="submit" value="Pokračovat"/>'.
        '</form>';
    } else {
      if ($_GET['step'] == '2') {
        $TimeFrom = strtotime($_GET['time-from']);
        $Output = '<table style="width: 100%"><tr><td>';
        $Output .= '<form method="post" action="'.$this->System->Link('/nova-jizda/?step=3').'">'.
        '<input type="hidden" name="from" value="'.$_GET['from'].'"/><br/>'.
        '<input type="hidden" name="to" value="'.$_GET['to'].'"/><br/>'.
        '<input type="hidden" name="time-from" value="'.$_GET['time-from'].'"/><br/>'.
        '<input type="hidden" name="seats" value="'.$_GET['seats'].'"/><br/>'.
        '<input type="hidden" name="step" value="3"/><br/>'.
        'Popis:<br/><textarea name="desc"></textarea><br/>'.
        'Auto: <select name="car">';
        $DbResult = $this->Database->query('SELECT Car.Id, CONCAT(CarManufacturer.Name, " ", CarModel.Name) AS ModelName FROM Car '.
          'LEFT JOIN CarModel ON CarModel.Id=Car.Model '.
          'LEFT JOIN CarManufacturer ON CarManufacturer.Id = CarModel.Manufacturer '.
          'WHERE Car.Owner='.Core::Cast($this->System)->User->User['Id']);
        while ($DbRow = $DbResult->fetch_assoc())
        {
          $Output .= '<option value="'.$DbRow['Id'].'"/>'.$DbRow['ModelName'].'</option>';
        }
        $Output .= '</select>'.
          '<input type="submit" value="Vytvořit"/>'.
          '</form>';
        $Map = new MapGoogle($this->System);
        $Map->Key = 'AIzaSyDQ-tOjP9mO8ZpSEuBc5_oCRg30rpQZiBI';
        $Map->Width = 400;
        $Map->Height = 300;
        $Map->Path = array($_GET['from'], $_GET['to']);
        //$Map->Path = array('Praha', 'Brno', 'Zlín', 'Vsetín');
        $Track = $Map->Route();
        $Output .= '<h3>Trasa</h3>';
        $PricePerKm = 0.8;
        $Output .= '<table class="WideTable"><tr><th>Úsek</th><th>Odjezd</th><th>Trvání</th><th>Vzdálenost [km]</th><th>Cena [Kč]</th></tr>';
        foreach ($Track as $Index => $TrackItem)
        {
          if ($Index > 0)
          {
            $Track[$Index]['Time'] = $TimeFrom + $Track[$Index - 1]['Duration'];
            $RelDistance = $TrackItem['Distance'] - $Track[$Index - 1]['Distance'];
            $RelDuration = $TrackItem['Duration'] - $Track[$Index - 1]['Duration'];
            $Track[$Index]['Price'] = round($PricePerKm * $RelDistance / 1000);
            $Output .= '<tr><td>'.$Map->Path[$Index - 1].' → '.$TrackItem['Destination'].'</td>'.
              '<td>'.TimeToMysqlDateTime($Track[$Index]['Time']).'</td>'.
              '<td>'.time_elapsed($RelDuration).'</td>'.
              '<td>'.round($RelDistance / 1000).'</td>'.
              '<td>'.$Track[$Index]['Price'].'</td></tr>';

          } else {
            $Track[$Index]['Time'] = $TimeFrom;
            $Track[$Index]['Price'] = 0;
          }
        }
        $Output .= '<tr><td>'.$Map->Path[0].' → '.$Map->Path[count($Map->Path) - 1].'</td>'.
          '<td>'.TimeToMysqlDateTime($Track[0]['Time']).'</td>'.
          '<td>'.time_elapsed($Track[count($Track) - 1]['Duration']).'</td>'.
          '<td>'.round($Track[count($Track) - 1]['Distance'] / 1000).'</td>'.
          '<td>'.round($PricePerKm * $Track[count($Track) - 1]['Distance'] / 1000).'</td></tr>';
        $Output .= '</table><br/>';
        $Output .= 'Vzdálenost: '.round($Track[count($Track) - 1]['Distance'] / 1000, 1).' km<br/>';
        $Output .= 'Délka jízdy: '.time_elapsed($Track[count($Track) - 1]['Duration']).'<br/>';
        $Output .= '</td><td>';
        $Map->Key = 'AIzaSyDwKYuEdkXAl9Y2RyDLf5m03n-ItHaqdKs';
        $Output .= $Map->Show();
        $Output .= '</td></tr></table>';
        $_SESSION['Track'] = $Track;
        $_SESSION['SeatCount'] = $_GET['seats'];
      } else
      if ($_GET['step'] == '3') {
        $this->Database->insert('Ride', array(
          'Driver' => Core::Cast($this->System)->User->User['Id'],
          'SeatCount' => $_POST['seats'],
          'Car' => $_POST['car'],
          'Details' => $_POST['desc'],
        ));
        $RideId = $this->Database->insert_id;
        foreach ($_SESSION['Track'] as $Index => $TrackItem)
        {
          $this->Database->insert('RideStop', array(
            'Ride' => $RideId,
            'Place' => $TrackItem['Destination'],
            'Time' => TimeToMysqlDateTime($TrackItem['Time']),
            'Price' => $TrackItem['Price'],
            'Sequence' => $Index,
            'PassengerCount' => 0,
          ));
        }
        $Output = 'Nová jízda přidána.';
      }
    }
    return $Output;
  }
}
