<?php

namespace Drupal\materio_expo\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\Cookie;

/**
 * Class QRController.
 */
class QRController extends ControllerBase {

  public function setcookie($ref) {
    //? https://drupal.stackexchange.com/questions/278203/how-do-i-set-a-cookie-using-response-headers-setcookie-in-a-form-submission

    // $form_state->setRedirect('materio_expo.qr_controller_getfile', ['ref'=>$ref]);
    // $response = new RedirectResponse(!empty($destination) ? $destination : '/');

    $url = Url::fromRoute('materio_expo.qr_controller_getfile', ['ref'=>$ref]);
    $response = new RedirectResponse($url->toString());
    $response->headers->setCookie(new Cookie('materio_expo_email', true, strtotime( '+3 days' ), '/'));
    $response->send();
    return $response;
  }

  /**
   */
  public function getfile($ref) {
    //? https://drupal.stackexchange.com/questions/255216/how-to-do-a-redirectresponse-with-a-destination-query-parameter

    //* check if email cookie is present (form submitted)
    // $session = \Drupal::request()->getSession();
    // $alreadysetemail = $session->get('materio_expo_email');
    $alreadysetemail = \Drupal::request()->cookies->get('materio_expo_email', false);
    if($alreadysetemail){

      //* get node from ref
      $entity_storage = \Drupal::entityTypeManager()->getStorage('node');
      $query = $entity_storage->getQuery()
        ->condition('type', 'materiau')
        ->condition('status', '1')
        ->accessCheck()
        ->condition('field_reference', $ref);
      $results = $query->execute();
      $nid = array_pop($results);
      $node = $entity_storage->load($nid);

      //* get file from node
      $file = $node->get('field_fiche_expo')->referencedEntities()[0];

      //* redirect to file
      return new RedirectResponse($file->createFileUrl());
      // return [
      //   '#type' => 'markup',
      //   '#markup' => $this->t("Error, email not provided"),
      // ];


    } else {
      // return [
      //   '#type' => 'markup',
      //   '#markup' => $this->t("Error, email not provided"),
      // ];
      $url = Url::fromRoute('materio_expo.get_email', ['ref'=>$ref]);
      return new RedirectResponse($url->toString());
    }
  }

}
