<?php

class ModuleClientVersion extends Module
{
  function __construct(System $System)
  {
    parent::__construct($System);
    $this->Name = 'ClientVersion';
    $this->Version = '1.0';
    $this->Creator = 'Chronos';
    $this->License = 'GNU/GPL';
    $this->Description = 'Manage and show list of known versions of WoW client.';
    $this->Dependencies = array();
  }

  function DoStart(): void
  {
    $this->System->RegisterPage(['client-version'], 'PageClientVersion');
    Core::Cast($this->System)->RegisterMenuItem(array(
      'Title' => T('Game version'),
      'Hint' => T('List of the game client versions'),
      'Link' => $this->System->Link('/client-version/'),
      'Permission' => LICENCE_ANONYMOUS,
      'Icon' => '',
    ), 10);
  }
}

class PageClientVersion extends Page
{
  function Show(): string
  {
    if (array_key_exists('action', $_GET))
    {
      if ($_GET['action'] == 'item') $Output = $this->ShowItem();
      else $Output = $this->ShowList();
    } else $Output = $this->ShowList();
    return $Output;
  }

  function ShowItem(): string
  {
    $Id = 0;
    if (TryGetUrlParameterInt('id', $Id))
    {
      $YesNo = array('Ne', 'Ano');
      $DbResult = $this->System->Database->query('SELECT * FROM `ClientVersion` WHERE `Id`='.$Id);
      if ($DbResult->num_rows > 0)
      {
        $Version = $DbResult->fetch_assoc();

        $Output = '<h3>'.T('Client version').'</h3>';
        $Output .= '<table class="BaseTable">'.
          '<tr><td>'.T('Version').'</td><td>'.$Version['Version'].'</td></tr>'.
          '<tr><td>'.T('More information').'</td><td><a href="http://www.wowwiki.com/Patch_'.$Version['Version'].'">wowwiki.com'.
          '</a></td></tr>'.
          '<tr><td>'.T('Build number').'</td><td>'.$Version['BuildNumber'].'</td></tr>'.
          '<tr><td>'.T('Release date').'</td><td>'.HumanDate($Version['ReleaseDate']).'</td></tr>'.
          '<tr><td>'.T('Title').'</td><td>'.$Version['Title'].'</td></tr>'.
          '<tr><td>'.T('Imported').'</td><td>'.$YesNo[$Version['Imported']].'</td></tr>'.
          '</table>';
        $Output .= '<div><a href="?">'.T('All versions list').'</a></div>';
        if ($Version['Imported'])
        {
          $Output .= '<div><a href="'.$this->System->Link('/progress/?Version='.
            $Version['Version']).'">'.T('Progress').'</a></div>';
        }
      } else $Output = ShowMessage(T('Item not found'), MESSAGE_CRITICAL);
    } else $Output = ShowMessage(T('Id not valid'), MESSAGE_CRITICAL);
    return $Output;
  }

  function ShowList(): string
  {
    $this->Title = T('Game version');
    $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `ClientVersion`');
    $DbRow = $DbResult->fetch_row();
    $PageList = GetPageList($DbRow[0]);

    $Output = '<h3>'.T('Game version').'</h3>'.
      $PageList['Output'];

    $TableColumns = array(
      array('Name' => 'Version', 'Title' => T('Version')),
      array('Name' => 'BuildNumber', 'Title' => T('Build')),
      array('Name' => 'ReleaseDate', 'Title' => T('Release date')),
      array('Name' => 'Title', 'Title' => T('Title')),
      array('Name' => 'Imported', 'Title' => T('Imported')),
    );
    $Order = GetOrderTableHeader($TableColumns, 'BuildNumber', 1);
    $Output .= '<table class="BaseTable">'.
      $Order['Output'];

    $YesNo = array('Ne', 'Ano');

    $DbResult = $this->System->Database->query('SELECT * FROM ClientVersion '.$Order['SQL'].$PageList['SQLLimit']);
    while ($Version = $DbResult->fetch_assoc())
    {
      $Output .= '<tr><td><a href="?action=item&amp;id='.$Version['Id'].'">'.
        $Version['Version'].'</a></td><td>'.$Version['BuildNumber'].'</td><td>'.
        HumanDate($Version['ReleaseDate']).'</td><td>'.$Version['Title'].'</td>'.
        '<td>'.$YesNo[$Version['Imported']].'</td></tr>';
    }
    $Output .= '</table>'.
      $PageList['Output'];
    return $Output;
  }
}

