<?php

namespace App\Controllers;

use CodeIgniter\Controller;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;

/**
 * BaseController provides a convenient place for loading components
 * and performing functions that are needed by all your controllers.
 *
 * Extend this class in any new controllers:
 * ```
 *     class Home extends BaseController
 * ```
 *
 * For security, be sure to declare any new methods as protected or private.
 */
abstract class BaseController extends Controller
{
    /**
     * Be sure to declare properties for any property fetch you initialized.
     * The creation of dynamic property is deprecated in PHP 8.2.
     */

    // protected $session;

    /**
     * @return void
     */
    public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
    {
        // Load here all helpers you want to be available in your controllers that extend BaseController.
        // Caution: Do not put the this below the parent::initController() call below.
        // $this->helpers = ['form', 'url'];

        // Caution: Do not edit this line.
        parent::initController($request, $response, $logger);

        // Preload any models, libraries, etc, here.
        // $this->session = service('session');
    }

    /**
     * /admin/* 또는 /bag/* 업무 화면 공통: 요청이 bag 이면 메인 사이트 레이아웃, 아니면 관리자 레이아웃.
     *
     * @param array<string, mixed> $contentData
     */
    /**
     * 워크스페이스 탭(iframe) 안에서 열린 요청인지. ?embed=1 또는 Sec-Fetch-Dest=iframe.
     * iframe 내 링크 이동·폼 전송·리다이렉트까지 모두 임베드로 처리되도록 헤더로도 판정한다.
     */
    protected function isEmbeddedRequest(): bool
    {
        if ($this->request->getGet('embed') !== null) {
            return true;
        }
        $dest = strtolower(trim((string) $this->request->getHeaderLine('Sec-Fetch-Dest')));

        return $dest === 'iframe' || $dest === 'frame';
    }

    protected function renderWorkPage(string $title, string $contentView, array $contentData = []): string
    {
        $content = view($contentView, $contentData);
        helper('admin');
        $path = function_exists('current_nav_request_path') ? current_nav_request_path() : '';
        if ($path === '') {
            $uri  = service('request')->getUri();
            $path = trim((string) $uri->getPath(), '/');
        }
        while (str_starts_with($path, 'index.php/')) {
            $path = substr($path, strlen('index.php/'));
        }
        // 워크스페이스 탭(iframe) 안이면 경로와 무관하게 임베드 레이아웃 → 셸 중첩 방지
        // (예: bag/code-kinds 탭에서 admin/code-kinds/create 등록 화면을 열 때)
        if ($this->isEmbeddedRequest()) {
            return view('bag/layout/embed', [
                'title'   => $title,
                'content' => $content,
            ]);
        }

        if ($path === 'bag' || str_starts_with($path, 'bag/')) {
            return view('bag/layout/portal', [
                'title'   => $title,
                'content' => $content,
            ]);
        }

        return view('admin/layout', [
            'title'   => $title,
            'content' => $content,
        ]);
    }
}
