<?php
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
**/


function timeperiod_type2str($timeperiod_type) {
	switch ($timeperiod_type) {
		case TIMEPERIOD_TYPE_ONETIME:
			return _('One time only');
		case TIMEPERIOD_TYPE_DAILY:
			return _('Daily');
		case TIMEPERIOD_TYPE_WEEKLY:
			return _('Weekly');
		case TIMEPERIOD_TYPE_MONTHLY:
			return _('Monthly');
	}
	return _('Unknown');
}

function schedule2str($timeperiod) {
	$timeperiod['hour'] = floor($timeperiod['start_time'] / SEC_PER_HOUR);
	$timeperiod['minute'] = floor(($timeperiod['start_time'] - ($timeperiod['hour'] * SEC_PER_HOUR)) / SEC_PER_MIN);
	if ($timeperiod['hour'] < 10) {
		$timeperiod['hour'] = '0'.$timeperiod['hour'];
	}
	if ($timeperiod['minute'] < 10) {
		$timeperiod['minute'] = '0'.$timeperiod['minute'];
	}

	if ($timeperiod['timeperiod_type'] == TIMEPERIOD_TYPE_ONETIME) {
		$str = zbx_date2str(DATE_TIME_FORMAT, $timeperiod['start_date']);
	}
	elseif ($timeperiod['timeperiod_type'] == TIMEPERIOD_TYPE_DAILY) {
		$str = _n('At %1$s:%2$s every day',
			'At %1$s:%2$s every %3$s days',
			$timeperiod['hour'],
			$timeperiod['minute'],
			$timeperiod['every']
		);
	}
	elseif ($timeperiod['timeperiod_type'] == TIMEPERIOD_TYPE_WEEKLY) {
		$days = '';
		$dayofweek = zbx_num2bitstr($timeperiod['dayofweek'], true);
		$length = strlen($dayofweek);
		for ($i = 0; $i < $length; $i++) {
			if ($dayofweek[$i] == 1) {
				if (!zbx_empty($days)) {
					$days .= ', ';
				}
				$days .= getDayOfWeekCaption($i + 1);
			}
		}

		$str = _n('At %1$s:%2$s %3$s of every week',
			'At %1$s:%2$s %3$s of every %4$s weeks',
			$timeperiod['hour'],
			$timeperiod['minute'],
			$days,
			$timeperiod['every']
		);
	}
	elseif ($timeperiod['timeperiod_type'] == TIMEPERIOD_TYPE_MONTHLY) {
		$months = '';
		$month = zbx_num2bitstr($timeperiod['month'], true);
		$length = strlen($month);
		for ($i = 0; $i < $length; $i++) {
			if ($month[$i] == 1) {
				if (!zbx_empty($months)) {
					$months .=', ';
				}
				$months .= getMonthCaption($i + 1);
			}
		}
		if ($timeperiod['dayofweek'] > 0) {
			$days = '';
			$dayofweek = zbx_num2bitstr($timeperiod['dayofweek'], true);
			$length = strlen($dayofweek);
			for ($i = 0; $i < $length; $i++) {
				if ($dayofweek[$i] == 1) {
					if (!zbx_empty($days)) {
						$days .= ', ';
					}
					$days .= getDayOfWeekCaption($i + 1);
				}
			}

			$every = '';
			switch ($timeperiod['every']) {
				case 1: $every = _('first'); break;
				case 2: $every = _x('second', 'adjective'); break;
				case 3: $every = _('third'); break;
				case 4: $every = _('fourth'); break;
				case 5: $every = _x('last', 'week of month'); break;
			}

			$str = _s('At %1$s:%2$s on %3$s %4$s of every %5$s',
				$timeperiod['hour'],
				$timeperiod['minute'],
				$every,
				$days,
				$months
			);
		}
		else {
			$str = _s('At %1$s:%2$s on day %3$s of every %4$s',
				$timeperiod['hour'],
				$timeperiod['minute'],
				$timeperiod['day'],
				$months
			);
		}
	}
	return $str;
}
