/*:
 * @plugindesc 立ち絵の透過オプションプラグイン（エラー修正＆オプション対応）
 * @author あなた
 *
 * @help
 * 立ち絵の表示モードを選択し、スイッチ14がONのときに機能します。
 *
 * 【オプションメニューの選択肢】
 * 0: 常に表示（透過なし）
 * 1: Qキーで切替（25% ⇔ 100%）
 */

(() => {
    const switchId = 14; // スイッチ14がONのときのみ動作
    let qKeyTransparent = false;

    // オプションに追加する選択肢
    const pictureModes = ["常に表示", "Qキーで透過"];

    // ConfigManager にデフォルト値をセット
    if (typeof ConfigManager.StandingPictureMode === "undefined") {
        ConfigManager.StandingPictureMode = 0;
    }

    // 設定データの保存
    const _ConfigManager_makeData = ConfigManager.makeData;
    ConfigManager.makeData = function() {
        const config = _ConfigManager_makeData.call(this);
        config.StandingPictureMode = this.StandingPictureMode;
        return config;
    };

    // 設定データの読み込み（エラー防止）
    const _ConfigManager_applyData = ConfigManager.applyData;
    ConfigManager.applyData = function(config) {
        _ConfigManager_applyData.call(this);
        this.StandingPictureMode = (config && typeof config.StandingPictureMode !== "undefined") ? config.StandingPictureMode : 0;
    };

    // オプションメニューに追加
    const _Window_Options_addGeneralOptions = Window_Options.prototype.addGeneralOptions;
    Window_Options.prototype.addGeneralOptions = function() {
        _Window_Options_addGeneralOptions.call(this);
        this.addCommand("立ち絵の表示モード", 'StandingPictureMode');
    };

    // オプションの現在の選択肢を表示
    Window_Options.prototype.statusText = function(symbol) {
        if (symbol === 'StandingPictureMode') {
            return pictureModes[ConfigManager.StandingPictureMode];
        }
        return Window_Options.prototype.statusText.call(this, symbol);
    };

    // オプション変更時の処理
    const _Window_Options_processOk = Window_Options.prototype.processOk;
    Window_Options.prototype.processOk = function() {
        const index = this.index();
        const symbol = this.commandSymbol(index);
        if (symbol === 'StandingPictureMode') {
            ConfigManager.StandingPictureMode = (ConfigManager.StandingPictureMode + 1) % pictureModes.length;
            this.redrawItem(index);
            ConfigManager.save();
        } else {
            _Window_Options_processOk.call(this);
        }
    };

    // ピクチャ透過処理
    const updatePictureOpacity = (opacity) => {
        for (let i = 21; i <= 29; i++) {
            const picture = $gameScreen.picture(i);
            if (picture) {
                picture._opacity = opacity;
            }
        }
    };

    // プレイヤー移動処理をフック
    const _Game_Player_update = Game_Player.prototype.update;
    Game_Player.prototype.update = function(sceneActive) {
        _Game_Player_update.call(this, sceneActive);

        // スイッチ14がOFFなら動作しない
        if (!$gameSwitches.value(switchId)) return;

        const mode = ConfigManager.StandingPictureMode;

        if (mode === 0) {
            // 常に表示（透過なし）
            updatePictureOpacity(255);
        } else if (mode === 1) {
            // Qキーで切り替え
            if (Input.isTriggered('pageup')) { // 'Q'キーは'pageup'に対応
                qKeyTransparent = !qKeyTransparent;
                updatePictureOpacity(qKeyTransparent ? 64 : 255);
            }
        }
    };
})();
