<?php

namespace Acms\Services\SiteSeed;

/**
 * SiteSeeder がファイル群をコピーする宛先パスの集合 (不変)
 *
 * 本番実行時は `SiteSeedDestination::fromScriptDir()` で
 * SCRIPT_DIR 配下 (archives/ / media/ / storage/ / themes/) を使う。
 *
 * テスト時は `SiteSeedDestination::underRoot($tmpDir)` で一時ディレクトリを指す
 * インスタンスを渡して副作用を閉じ込める。
 */
final class SiteSeedDestination
{
    public function __construct(
        public readonly string $archivesDir,
        public readonly string $mediaDir,
        public readonly string $storageDir,
        public readonly string $themesDir,
    ) {
    }

    /**
     * SCRIPT_DIR 配下の標準パスで初期化する (本番 / dev デフォルト)
     */
    public static function fromScriptDir(): self
    {
        $root = rtrim(SCRIPT_DIR, '/') . '/';
        return new self(
            archivesDir: $root . ARCHIVES_DIR,
            mediaDir: $root . MEDIA_LIBRARY_DIR,
            storageDir: $root . MEDIA_STORAGE_DIR,
            themesDir: $root . THEMES_DIR,
        );
    }

    /**
     * 任意のルートディレクトリ配下に配置する (テスト用途)
     */
    public static function underRoot(string $root): self
    {
        $root = rtrim($root, '/') . '/';
        return new self(
            archivesDir: $root . ARCHIVES_DIR,
            mediaDir: $root . MEDIA_LIBRARY_DIR,
            storageDir: $root . MEDIA_STORAGE_DIR,
            themesDir: $root . THEMES_DIR,
        );
    }
}
