<?php

/**
 * @copyright  2021 Podlibre
 * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
 * @link       https://castopod.org/
 */

namespace ActivityPub\Controllers;

use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\Controller;

class BlockController extends Controller
{
    /**
     * @var string[]
     */
    protected $helpers = ['activitypub'];

    public function attemptBlockActor(): RedirectResponse
    {
        $rules = [
            'handle' => 'required',
        ];

        if (!$this->validate($rules)) {
            return redirect()
                ->back()
                ->withInput()
                ->with('errors', $this->validator->getErrors());
        }

        $handle = $this->request->getPost('handle');

        if ($parts = split_handle($handle)) {
            if (
                ($actor = get_or_create_actor(
                    $parts['username'],
                    $parts['domain'],
                )) === null
            ) {
                return redirect()
                    ->back()
                    ->withInput()
                    ->with('error', 'Actor not found.');
            }

            model('ActorModel')->blockActor($actor->id);
        }

        return redirect()->back();
    }

    function attemptBlockDomain(): RedirectResponse
    {
        $rules = [
            'domain' => 'required',
        ];

        if (!$this->validate($rules)) {
            return redirect()
                ->back()
                ->withInput()
                ->with('errors', $this->validator->getErrors());
        }

        model('BlockedDomainModel')->blockDomain(
            $this->request->getPost('domain'),
        );

        return redirect()->back();
    }

    function attemptUnblockActor(): RedirectResponse
    {
        $rules = [
            'actor_id' => 'required',
        ];

        if (!$this->validate($rules)) {
            return redirect()
                ->back()
                ->withInput()
                ->with('errors', $this->validator->getErrors());
        }

        model('ActorModel')->unblockActor($this->request->getPost('actor_id'));

        return redirect()->back();
    }

    function attemptUnblockDomain(): RedirectResponse
    {
        $rules = [
            'domain' => 'required',
        ];

        if (!$this->validate($rules)) {
            return redirect()
                ->back()
                ->withInput()
                ->with('errors', $this->validator->getErrors());
        }

        model('BlockedDomainModel')->unblockDomain(
            $this->request->getPost('domain'),
        );

        return redirect()->back();
    }
}