<?php

namespace Drupal\restaurant_bookings\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\restaurant\Form\AppForm;
use Drupal\restaurant\Bookings\Booking;
use Drupal\restaurant\Form\MultipartForm;
use Drupal\restaurant_bookings\Form\Elements\BookingTimes;

class Times extends MultipartForm {

  /**
   * Returns a unique string identifying the form.
   *
   * The returned ID should be a unique string that can be a valid PHP function
   * name, since it's used in hook implementation names such as
   * hook_form_FORM_ID_alter().
   *
   * @return string
   *   The unique string identifying the form.
   */
  public function getFormId()
  {
    return 'select_time';
  }

  public function buildForm(array $form, FormStateInterface $form_state)
  {
    if ($this->getSetting('requirelogin')) {

      if (! \Drupal::currentUser()->isAuthenticated()) {
        $this->addMessage($this->t('Login required to make a booking'), 'error')->http_redirect('/user/login');
      }
    }

    $date = array('date' => $this->store->get('date'));


    $bookings = new Booking($this->conn);
    $times = $bookings->getTimes($date['date'], false);
    $bookings->filterTimes($times, $date['date'], $this->store->get('guests'));

    if (empty ($times)) {
      $this->addMessage("No times are available for the date and service you selected", "error");
      if ($this->inAdminPath()) {
        $this->http_redirect('/admin/restaurant/bookings/add');
      } else {
        $this->http_redirect('/bookings/add');
      }
    }

    $values = [
        'times' => $times,
        'date' => $date['date']
    ];

    FormElements::BookingTimes($form, $values, $this->inAdminPath());

    return $form;
  }

  public function submitForm(array &$form, FormStateInterface $form_state)
  {

  }

}
