<?php

namespace OCA\OrganizationFolders\AppInfo;

use Psr\Container\ContainerInterface;

use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\AppFramework\Bootstrap\IBootContext;
use OCP\IUserSession;

use OCA\DAV\Events\SabrePluginAddEvent;
use OCA\Files\Event\LoadAdditionalScriptsEvent;

use OCA\OrganizationFolders\Listener\SabrePluginAddListener;
use OCA\OrganizationFolders\Listener\LoadAdditionalScripts;
use OCA\OrganizationFolders\Security\AuthorizationService;
use OCA\OrganizationFolders\Security\ResourceVoter;
use OCA\OrganizationFolders\Security\OrganizationFolderVoter;

class Application extends App implements IBootstrap {
	public const APP_ID = 'organization_folders';

	public function __construct() {
		parent::__construct(self::APP_ID);
	}

	public function register(IRegistrationContext $context): void {
		$context->registerEventListener(LoadAdditionalScriptsEvent::class, LoadAdditionalScripts::class);
		$context->registerEventListener(SabrePluginAddEvent::class, SabrePluginAddListener::class);

		$context->registerService(AuthorizationService::class, function (ContainerInterface $c) {
			$service = new AuthorizationService($c->get(IUserSession::class));
			$service->registerVoter($c->get(OrganizationFolderVoter::class));
			$service->registerVoter($c->get(ResourceVoter::class));
			return $service;
		});
	}

	public function boot(IBootContext $context): void {
	}
}