#!/usr/bin/php
<?php

require_once('/usr/share/ombutel/www/includes/cli.php');

use ombutel\db;
if ($argc < 3 || !preg_match('/--(hours|days|weeks|months|years|num)/', $argv[1])) {
	echo "Usage: {$argv[0]} --[hours/days/weeks/months/years/num] N\n".
		"Delete PMS records older than specified time period.\n".
		"  --hours     Delete records older than N hours.\n".
		"  --days      Delete records older than N days.\n".
		"  --weeks     Delete records older than N weeks.\n".
		"  --months    Delete records older than N months.\n".
		"  --years     Delete records older than N years.\n".
		"  --num       Delete all but the last N records.\n".
		"\n";
} else {
	prune(substr($argv[1], 2), @intval($argv[2]));
}

function prune($unit, $amount) {
	switch ($unit) {
		case 'hours': return prune_interval('HOUR', $amount);
		case 'days': return prune_interval('DAY', $amount);
		case 'weeks': return prune_interval('WEEK', $amount);
		case 'months': return prune_interval('MONTH', $amount);
		case 'years': return prune_interval('YEAR', $amount);
		case 'num': return prune_exact($amount);
	}
}

function prune_interval($unit, $amount) {
	db::begin_transaction();
	$range = "`date` < date_sub(now(), interval {$amount} {$unit})";
	db::query("delete from `hospitality`.`buffer` where {$range}");
	db::query("delete from `hospitality`.`bufferout` where {$range}");
	db::commit();
}

function prune_exact($amount) {
	if ($amount > 0) {
		db::begin_transaction();
		db::query(
			"delete from `hospitality`.`buffer`
			where `id` <= (
				select `id` from (
					select `id`
					from `hospitality`.`buffer`
					order by `id`
					desc limit 1 offset {$amount}
				) t
			)"
		);

		db::query(
			"delete from `hospitality`.`bufferout`
			where `id` <= (
				select `id` from (
					select `id`
					from `hospitality`.`bufferout`
					order by `id`
					desc limit 1 offset {$amount}
				) t
			)"
		);
		db::commit();
	}
}

?>