<?php
declare(strict_types=1);

/**
 * 语言包管理工具
 * 页面: admin/langTool/index
 * 接口: langTool/files (语言文件列表) / langTool/scan (扫描) / langTool/grid (查) / langTool/save (改)
 */
class langToolAction extends Action
{
    /** 扫描的目录（相对 projectDir），按要求含 view / static/js/lib / model / config */
    private const SCAN_DIRS = [
        'admin/view',
        'admin/static/js/lib',
        'model',
        'config',
    ];

    public function index()
    {
        View::set(['pageTitle' => lg('语言包')]);
        View::put();
    }

    /**
     * 下拉列表用：语言文件名（排除 scan.php 和 zh-CN.php）
     */
    public function files()
    {
        $this->success(LangScanner::editableLangFiles($this->langDir()));
    }

    /**
     * 触发一次扫描 + 同步
     */
    public function scan()
    {
        $dirs = array_map(
            fn(string $dir): string => rtrim(Mvc::$cfg['projectDir'], '/') . '/' . $dir,
            self::SCAN_DIRS
        );

        $this->success(LangScanner::run($dirs, $this->langDir()));
    }

    /**
     * 取某个语言文件的 key/value 列表
     */
    public function grid()
    {
        $file = (string) ($this->request['file'] ?? '');
        $this->success(['data' => LangScanner::loadFileRows($this->langDir(), $file)]);
    }

    /**
     * 更新某个语言文件里指定 key 的翻译值
     */
    public function save()
    {
        $file = (string) ($this->request['file'] ?? '');
        $key = (string) ($this->request['key'] ?? '');
        $values = is_array($this->request['values'] ?? null) ? $this->request['values'] : [];

        LangScanner::updateFileValue($this->langDir(), $file, $key, (string) ($values['value'] ?? ''));
        $this->success();
    }

    private function langDir(): string
    {
        return rtrim(Mvc::$cfg['projectDir'], '/') . '/lang';
    }
}
