<?php

namespace Drupal\materio_decoupled\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
 * Class AjaxHomeController.
 */
class MaterioDecoupledLanguageLinks extends ControllerBase {


  /*
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $languageManager;


  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('language_manager')
    );
  }

  /**
   * Constructs a new MaterioDecoupledLanguageLinks object.
   *
   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
   *   The language manager.
   */
  public function __construct(LanguageManagerInterface $language_manager) {
    $this->languageManager = $language_manager;
  }

  /**
   * getPathTranslationLinks
   *
   * @return string
   *   Return translations links given a path.
   */
  public function getPathTranslationLinks(Request $request) {
    $post_data = json_decode( $request->getContent(),TRUE);
    $path = $post_data['path'];
    $data = [];

    // build the links
    $url_object = \Drupal::service('path.validator')->getUrlIfValid($path);

    if (!$url_object) {
      // if path does not exists
      $data["error"] = "path {$path} is not valid";
      $route_name = "<front>";
      $route_parameters = array();
    }else{
      $route_name = $url_object->getRouteName();
      $route_parameters = $url_object->getrouteParameters();
    }
    
    $languages = $this->languageManager->getNativeLanguages();
    foreach ($languages as $key => $language) {
      $url = Url::fromRoute($route_name, $route_parameters, ["language"=>$language]);
      $links[$key] = [
        "title" => $language->get('label'),
        "url" => $url->toString(),
        "sys_path" => $url->getInternalPath()
      ];
    }

    $data["links"] = $links;

    return new JsonResponse($data);
  }

}
