<?php

include_once(dirname(__FILE__).'/Base.php');

class TypeTime extends TypeBase
{
  function __construct(FormManager $FormManager)
  {
    parent::__construct($FormManager);
    $this->DatabaseCompareOperators = array('Rovno' => '=', 'Nerovno' => '!=', 'Menší' => '<', 'Větší' => '>');
  }

  function OnView(array $Item): ?string
  {
    if ($Item['Value'] == 0) return '';
    if ((strtolower($Item['Value']) == 'now') or (strtolower($Item['Value']) == '')) $Item['Value'] = time();
    $TimeParts = getdate($Item['Value']);

    $Output = sprintf('%02d', $TimeParts['hours']).':'.sprintf('%02d', $TimeParts['minutes']).':'.sprintf('%02d', $TimeParts['seconds']);
    return $Output;
  }

  function OnEdit(array $Item): string
  {
    if (($Item['Value'] == null) or (($Item['Value'] !== null) and ((strtolower($Item['Value']) == 'now') or (strtolower($Item['Value']) == ''))))
    {
      $Item['Value'] = time();
      $IsNull = true;
    } else $IsNull = false;
    $TimeParts = getdate($Item['Value']);

    $Output = '';
    $Style = '';
    if (array_key_exists('Null', $Item) and $Item['Null'])
    {
      if ($IsNull)
      {
        $Checked = ' checked="1"';
        $Style = 'style="display:inline;"';
      } else
      {
        $Checked = '';
        $Style = 'style="display:none;"';
      }
      $Output .= '<input type="checkbox" name="'.$Item['Name'].'-null"'.$Checked.' onclick="toggle(\''.
        $Item['Name'].'-hour\');toggle(\''.$Item['Name'].'-minute\');toggle(\''.$Item['Name'].'-second\');"/>';
    }

    // Hour
    $Output .= '<select name="'.$Item['Name'].'-hour" id="'.$Item['Name'].'-hour" '.$Style.'>';
    for ($I = 1; $I <= 24; $I++)
    {
      if ($TimeParts['hours'] == $I) $Selected = ' selected="1"'; else $Selected = '';
      $Output .= '<option value="'.$I.'"'.$Selected.'>'.$I.'</option>';
    }
    $Output .= '</select>';
    // Minute
    $Output .= '<select name="'.$Item['Name'].'-minute" id="'.$Item['Name'].'-minute" '.$Style.'>';
    for ($I = 1; $I <= 60; $I++)
    {
      if ($TimeParts['month'] == $I) $Selected = ' selected="1"'; else $Selected = '';
      $Output .= '<option value="'.$I.'"'.$Selected.'>'.$I.'</option>';
    }
    $Output .= '</select>';
    // Second
    $Output .= '<select name="'.$Item['Name'].'-second" id="'.$Item['Name'].'-second" '.$Style.'>';
    for ($I = 1; $I <= 60; $I++)
    {
      if ($TimeParts['seconds'] == $I) $Selected = ' selected="1"'; else $Selected = '';
      $Output .= '<option value="'.$I.'"'.$Selected.'>'.$I.'</option>';
    }
    $Output .= '</select>';
    return $Output;
  }

  function OnLoad(array $Item): ?string
  {
    if (!array_key_exists($Item['Name'].'-null', $_POST) and array_key_exists('Null', $Item) and ($Item['Null'] == true)) return null;
      return mktime($_POST[$Item['Name'].'-hour'], $_POST[$Item['Name'].'-minute'], $_POST[$Item['Name'].'-second']);
  }

  function OnCanLoad(array $Item): bool
  {
    return array_key_exists($Item['Name'].'-null', $_POST) or (array_key_exists($Item['Name'].'-hour', $_POST) and 
    array_key_exists($Item['Name'].'-minute', $_POST) and array_key_exists($Item['Name'].'-second', $_POST)
    );
  }

  function OnLoadDb(array $Item): ?string
  {
    return MysqlTimeToTime($Item['Value']);
  }

  function OnSaveDb(array $Item): ?string
  {
    if ($Item['Value'] == null) return null;
      else return date('H:i:s', $Item['Value']);
  }

  function DatabaseEscape(string $Value): string
  {
    return '"'.addslashes($Value).'"';
  }
}