<?php

declare(strict_types=1);

/**
 * @copyright 2025 Jonathan Treffler <mail@jonathan-treffler.de>
 *
 * @author Jonathan Treffler <mail@jonathan-treffler.de>
 *
 * @license GNU AGPL version 3 or any later version
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 */

namespace OCA\DavPush\BackgroundJob;

use Psr\Log\LoggerInterface;

use OCP\BackgroundJob\TimedJob;
use OCP\AppFramework\Utility\ITimeFactory;

use OCA\DavPush\Service\SubscriptionService;
use OCA\DavPush\Service\WebPushSubscriptionService;

class SubscriptionsCleanup extends TimedJob {
	
	public function __construct(
		private LoggerInterface $logger,
		private SubscriptionService $subscriptionService,
		private WebPushSubscriptionService $webPushSubscriptionService,
		ITimeFactory $time,
	) {
		parent::__construct($time);

		// Run once an hour
		$this->setInterval(3600);
	}

	protected function run($arguments) {
		$result = $this->subscriptionService->cleanup(batched: true);
		
		$this->logger->info("DAV Push background job deleted " . $result . " expired/failing subscriptions");

		$result = $this->webPushSubscriptionService->deleteOrphanedSubscriptions();

		if($result > 0) {
			$this->logger->info(
				message: "DAV Push background job deleted " . $result . " orphaned web push entries. This should not happen during normal operation!"
			);
		}
	}
}