<?php

namespace Acms\Services\Setup\Install;

use Acms\Services\Facades\LocalStorage;

/**
 * インストール時に各ディレクトリの `htaccess.txt` を `.htaccess` へ自動リネーム（活性化）する。
 *
 * `.htaccess` は dotfile で FTP/zip 転送時に欠落しやすいため配布は `htaccess.txt` で行い、
 * サーバ上でのリネームはこのクラスがインストーラー内で肩代わりする（ユーザーに手動リネームを
 * させない）。リネームはサーバサイドのファイル移動なので dotfile 転送問題は起きない。
 *
 * - `.htaccess` が既に在るディレクトリは上書きしない（ユーザーのカスタム/既存設定を保護）。
 * - `htaccess.txt` が無ければ何もしない（php/lang 等 .htaccess 直同梱のディレクトリは対象外）。
 * - 書き込み権限不足等の失敗は握りつぶす（呼び出し側が直後に存在チェックし、失敗はパーミッション
 *   エラーとして具体的な設定値つきで提示する）。副作用は Storage 経由に閉じ、判定は単純。
 */
final class HtaccessActivator
{
    /**
     * 各ディレクトリの htaccess.txt を .htaccess にリネームする。
     *
     * @param list<string> $directories 末尾スラッシュ付きの絶対パス
     * @return list<string> 実際にリネームできたディレクトリ
     */
    public function activate(array $directories): array
    {
        $activated = [];
        foreach ($directories as $directory) {
            $htaccess = $directory . '.htaccess';
            $source = $directory . 'htaccess.txt';
            if (LocalStorage::exists($htaccess) || !LocalStorage::exists($source)) {
                continue;
            }
            if (LocalStorage::move($source, $htaccess)) {
                $activated[] = $directory;
            }
        }

        return $activated;
    }
}
