<?php

declare(strict_types=1);

/*
 * install-patches.php — 누락 항목별 패치 카탈로그.
 *
 * 키 = 패키지 매니저 (apt / dnf / yum / apk / pacman) 또는 PHP 빌드 (aapanel / source).
 * 값 = 설치할 패키지 목록 (배열) — placeholder {V} 는 런타임에 PHP major.minor (예: 8.3) 로 치환.
 *      {VN} 은 dot 없는 버전 (예: 83) 으로 치환.
 *
 * 특수 prefix:
 *   manual:<note-id>   — UI 안내만 (자동 설치 비활성)
 *   pecl:<ext-name>    — pecl install + ini 자동 생성 시도
 *   ini-only           — 패키지 설치 불필요, ini 만 활성화 필요
 *   source-build       — aaPanel 등에서 소스 컴파일 필요 (수동 안내)
 */

return [

    'extensions' => [
        'redis' => [
            'apt'     => ['php{V}-redis'],
            'dnf'     => ['php-redis'],
            'yum'     => ['php-pecl-redis'],
            'apk'     => ['php{VN}-pecl-redis'],
            'pacman'  => ['php-redis'],
            'aapanel' => ['manual:aapanel_php_extension'],
            'source'  => ['pecl:redis'],
        ],
        'imagick' => [
            'apt'     => ['php{V}-imagick', 'imagemagick'],
            'dnf'     => ['php-imagick', 'ImageMagick'],
            'yum'     => ['php-pecl-imagick', 'ImageMagick'],
            'apk'     => ['php{VN}-pecl-imagick', 'imagemagick'],
            'pacman'  => ['php-imagick', 'imagemagick'],
            'aapanel' => ['manual:aapanel_php_extension'],
            'source'  => ['pecl:imagick'],
        ],
        'memcached' => [
            'apt'     => ['php{V}-memcached', 'memcached'],
            'dnf'     => ['php-pecl-memcached', 'memcached'],
            'yum'     => ['php-pecl-memcached', 'memcached'],
            'apk'     => ['php{VN}-memcached', 'memcached'],
            'pacman'  => ['php-memcached', 'memcached'],
            'aapanel' => ['manual:aapanel_php_extension'],
        ],
        'opcache' => [
            'apt'     => ['php{V}-opcache'],
            'dnf'     => ['php-opcache'],
            'yum'     => ['php-opcache'],
            'apk'     => ['php{VN}-opcache'],
            'pacman'  => [],
            'aapanel' => ['ini-only'],
            'source'  => ['ini-only'],
        ],
        'ldap' => [
            'apt'     => ['php{V}-ldap'],
            'dnf'     => ['php-ldap'],
            'yum'     => ['php-ldap'],
            'apk'     => ['php{VN}-ldap'],
            'pacman'  => ['php-ldap'],
            'aapanel' => ['source-build'],
        ],
        'maxminddb' => [
            'apt'     => ['php{V}-maxminddb'],
            'apk'     => ['php{VN}-pecl-maxminddb'],
            'aapanel' => ['source-build'],
            'source'  => ['pecl:maxminddb'],
        ],
        'pcntl' => [
            'apt'     => [],
            'dnf'     => [],
            'yum'     => [],
            'apk'     => ['php{VN}-pcntl'],
            'note'    => 'PHP-FPM 환경에서는 일반적으로 비활성됩니다. CLI 전용 확장입니다.',
        ],
        'fileinfo' => [
            'apt'     => ['php{V}-fileinfo'],
            'dnf'     => ['php-fileinfo'],
            'yum'     => ['php-fileinfo'],
            'apk'     => ['php{VN}-fileinfo'],
            'aapanel' => ['source-build'],
        ],
        'exif' => [
            'apt'     => ['php{V}-exif'],
            'dnf'     => ['php-exif'],
            'yum'     => ['php-exif'],
            'apk'     => ['php{VN}-exif'],
            'aapanel' => ['source-build'],
        ],
        'bcmath' => [
            'apt'     => ['php{V}-bcmath'],
            'dnf'     => ['php-bcmath'],
            'yum'     => ['php-bcmath'],
            'apk'     => ['php{VN}-bcmath'],
            'pacman'  => ['php-bcmath'],
            'aapanel' => ['ini-only'],
        ],
        'gd' => [
            'apt'     => ['php{V}-gd'],
            'dnf'     => ['php-gd'],
            'yum'     => ['php-gd'],
            'apk'     => ['php{VN}-gd'],
            'pacman'  => ['php-gd'],
            'aapanel' => ['source-build'],
        ],
        'zip' => [
            'apt'     => ['php{V}-zip'],
            'dnf'     => ['php-pecl-zip'],
            'yum'     => ['php-pecl-zip'],
            'apk'     => ['php{VN}-zip'],
            'pacman'  => [],
            'aapanel' => ['source-build'],
        ],
        'intl' => [
            'apt'     => ['php{V}-intl'],
            'dnf'     => ['php-intl'],
            'yum'     => ['php-intl'],
            'apk'     => ['php{VN}-intl'],
            'pacman'  => ['php-intl'],
            'aapanel' => ['source-build'],
        ],
        'sodium' => [
            'apt'     => ['php{V}-sodium', 'libsodium23'],
            'dnf'     => ['php-sodium'],
            'yum'     => ['php-sodium'],
            'apk'     => ['php{VN}-sodium'],
            'aapanel' => ['source-build'],
        ],
        'mbstring' => [
            'apt'     => ['php{V}-mbstring'],
            'dnf'     => ['php-mbstring'],
            'yum'     => ['php-mbstring'],
            'apk'     => ['php{VN}-mbstring'],
            'pacman'  => [],
            'aapanel' => ['source-build'],
        ],
        'curl' => [
            'apt'     => ['php{V}-curl'],
            'dnf'     => ['php-curl'],
            'yum'     => ['php-curl'],
            'apk'     => ['php{VN}-curl'],
            'aapanel' => ['source-build'],
        ],
        'xml' => [
            'apt'     => ['php{V}-xml'],
            'dnf'     => ['php-xml'],
            'yum'     => ['php-xml'],
            'apk'     => ['php{VN}-xml'],
            'aapanel' => ['source-build'],
        ],
        'simplexml' => [
            'apt'     => ['php{V}-xml'],
            'dnf'     => ['php-xml'],
            'apk'     => ['php{VN}-simplexml'],
            'aapanel' => ['source-build'],
        ],
        'dom' => [
            'apt'     => ['php{V}-xml'],
            'dnf'     => ['php-xml'],
            'apk'     => ['php{VN}-dom'],
            'aapanel' => ['source-build'],
        ],
    ],

    /*
     * 디렉토리 권한 패치 — base_path() 기준 상대 경로.
     *
     * 형식: "<mode>:<owner>" — owner=__WEB_USER__ 는 detect()->web_user 로 치환.
     */
    'directory_permissions' => [
        'storage'                            => '775:__WEB_USER__',
        'storage/app'                        => '775:__WEB_USER__',
        'storage/framework'                  => '775:__WEB_USER__',
        'storage/framework/cache'            => '775:__WEB_USER__',
        'storage/framework/cache/data'       => '775:__WEB_USER__',
        'storage/framework/sessions'         => '775:__WEB_USER__',
        'storage/framework/views'            => '775:__WEB_USER__',
        'storage/logs'                       => '775:__WEB_USER__',
        'bootstrap/cache'                    => '775:__WEB_USER__',
        'public/storage'                     => '775:__WEB_USER__',
    ],

    /*
     * 자동 실행 안전 가드.
     *
     * - install.lock 부재 (설치 완료 후 차단)
     * - aaPanel 빌드 감지 시 자동 실행 비활성 (UI 안내)
     * - shell_exec 활성 + (root 또는 NOPASSWD sudo)
     */
    'safety' => [
        'auto_install_blocked_builds' => ['aapanel'],
        'auto_install_allowed_pms'    => ['apt', 'dnf'],
        'command_timeout_seconds'     => 180,
        'fpm_reload_grace_seconds'    => 2,
    ],

    /*
     * 빌드별 안내 노트 (UI 에 표시).
     */
    'build_notes' => [
        'aapanel'         => 'aaPanel 환경입니다. 자동 설치 대신 aaPanel 관리 패널 → 소프트웨어 관리 → PHP {V} → 설정 → 확장 에서 설치하세요.',
        'sury'            => 'Sury PPA (ondrej/php) 가 감지되었습니다. apt 명령을 사용합니다.',
        'debian-default'  => 'Debian/Ubuntu 기본 저장소를 사용합니다.',
        'rhel-default'    => 'RHEL/CentOS 기본 저장소를 사용합니다. (Remi/EPEL 권장)',
        'source'          => '소스 빌드 PHP 가 감지되었습니다. pecl 명령을 시도합니다.',
    ],

];
