<?php
/** 
 * @package     VikWP - Libraries
 * @subpackage  adapter.html
 * @author      E4J s.r.l.
 * @copyright   Copyright (C) 2023 E4J s.r.l. All Rights Reserved.
 * @license     http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 * @link        https://vikwp.com
 */

// No direct access
defined('ABSPATH') or die('No script kiddies please!');

/**
 * Extended Utility class for handling date display.
 *
 * @since 10.1.19
 */
abstract class JHtmlDate
{
	/**
	 * Function to convert a static time into a relative measurement.
	 *
	 * @param   mixed   $date    The date to convert.
	 * @param   string  $unit    The optional unit of measurement to return
	 *                           if the value of the diff is greater than one.
	 * @param   string  $time    An optional time to compare to, defaults to now.
	 * @param   string  $format  An optional format for the JHtml::date output.
	 *
	 * @return  string  The converted time string.
	 */
	public static function relative($date, $unit = null, $time = null, $format = null)
	{
		if ($time === null)
		{
			// get now
			$time = JFactory::getDate('now');
		}

		// get the difference in seconds between now and the time
		$diff = strtotime($time) - strtotime($date);

		// less than a minute
		if ($diff < 60)
		{
			return JText::translate('JLIB_HTML_DATE_RELATIVE_LESSTHANAMINUTE');
		}

		// round to minutes
		$diff = round($diff / 60);

		// 1 to 59 minutes
		if ($diff < 60 || $unit === 'minute')
		{
			return JText::plural('JLIB_HTML_DATE_RELATIVE_MINUTES', $diff);
		}

		// round to hours
		$diff = round($diff / 60);

		// 1 to 23 hours
		if ($diff < 24 || $unit === 'hour')
		{
			return JText::plural('JLIB_HTML_DATE_RELATIVE_HOURS', $diff);
		}

		// round to days
		$diff = round($diff / 24);

		// 1 to 6 days
		if ($diff < 7 || $unit === 'day')
		{
			return JText::plural('JLIB_HTML_DATE_RELATIVE_DAYS', $diff);
		}

		// round to weeks
		$diff = round($diff / 7);

		// 1 to 4 weeks
		if ($diff <= 4 || $unit === 'week')
		{
			return JText::plural('JLIB_HTML_DATE_RELATIVE_WEEKS', $diff);
		}

		// over a month, return the absolute time
		return JHtml::fetch('date', $date, $format);
	}
}
