<?php
/**
 * Copyright (c) 2019 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *   Eric Poirier (Eclipse Foundation)  - initial API and implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */

class SimultaneousRelease {

  public $file_path = "";

  /**
   * Get the New and Noteworthy links from the list of projects
   *
   * @return array
   */
  function getNewAndNoteworthyLinks() {
    $projects = $this->getProjects();
    if (empty($projects)) {
      return array();
    }

    if (!function_exists("sortByProjectName")) {
      function sortByProjectName($a, $b) {
        $a = $a['project_name'];
        $b = $b['project_name'];
        if ($a == $b) return 0;
        return ($a < $b) ? -1 : 1;
      }
    }
    uasort($projects, 'sortByProjectName');

    $links = array();
    foreach ($projects as $project) {
      if (empty($project['project_name']) || empty($project['new_and_noteworthy_url']) || !filter_var($project['new_and_noteworthy_url'], FILTER_VALIDATE_URL)) {
        continue;
      }
      $links[] = '<a href="'. $project['new_and_noteworthy_url'] .'">'. $project['project_name'] .'</a>';
    }
    return $links;
  }

  /**
   * Get a list of the projects that contributed to the Simultaneous Release
   *
   * @return array
   */
  public function getProjects() {
    $path = $this->getFilePath();
    if (empty($path)) {
      return array();
    }
    $json_data = json_decode(file_get_contents($path), TRUE);
    if (!empty($json_data)) {
      $json_data = reset($json_data);
      if (!empty($json_data['projects'])) {
        return $json_data['projects'];
      }
    }
    return array();
  }

  /**
   * Set the file path
   *
   * @param string $path
   *
   * @return bool
   */
  public function setFilePath($path) {

    if (empty($path) || !file_exists($path)) {
      return FALSE;
    }

    $this->file_path = $path;
    return TRUE;
  }

  /**
   * Get the file path
   *
   * @return string
   */
  public function getFilePath() {
    return $this->file_path;
  }

}