<?php

declare(strict_types=1);

namespace App\Filters;

use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Config\Roles;

/**
 * 관리자 전용 접근 필터.
 * logged_in 이고 mb_level 이 SUPER_ADMIN(4)·HEADQUARTERS_ADMIN(5)·LOCAL_ADMIN(3) 일 때만 통과.
 */
class AdminAuthFilter implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        if (! session()->get('logged_in')) {
            return redirect()->to(site_url('login'))->with('error', '로그인이 필요합니다.');
        }

        $level = (int) session()->get('mb_level');
        $isAdminLevel = Roles::isSuperAdminEquivalent($level) || $level === Roles::LEVEL_LOCAL_ADMIN;
        if (! $isAdminLevel) {
            return redirect()->to(site_url('/'))->with('error', '관리자만 접근할 수 있습니다.');
        }

        // Super/본부: 지자체 미선택 시 지자체 선택 페이지로 유도 (지자체 선택·지자체 CRUD는 미선택도 허용)
        $uri = $request->getUri();
        $seg2 = $uri->getSegment(2);
        $allowedWithoutSelection = ['select-local-government', 'local-governments'];
        if (Roles::isSuperAdminEquivalent($level) && ! in_array($seg2, $allowedWithoutSelection, true)) {
            $selected = session()->get('admin_selected_lg_idx');
            if ($selected === null || $selected === '') {
                return redirect()->to(site_url('admin/select-local-government'))->with('error', '작업할 지자체를 먼저 선택해 주세요.');
            }
        }

        helper('admin');
        return null;
    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        return $response;
    }
}
