/*:
 * @plugindesc 特定のスイッチがONのとき、スキルの消費MPを半減する（端数切り上げ）
 * @author あなたの名前
 *
 * @param mpHalfSwitchId
 * @text 消費MP半減スイッチID
 * @desc ONのとき、スキルの消費MPが半減するスイッチのID
 * @default 248
 * @type number
 *
 * @help
 * 【概要】
 * 指定したスイッチがONのとき、スキルの消費MPを半減します。
 * OFFの場合は通常のMP消費となります。
 * 
 * 【使用方法】
 * 1. プラグインパラメータで「消費MP半減スイッチID」を設定（デフォルトは248）
 * 2. そのスイッチをONにすると、スキルのMP消費が半減
 * 3. 戦闘時、メニュー画面のMP表示にも対応
 * 4. スイッチをOFFにすると、通常の消費MPに戻る
 * 
 * 【注意点】
 * - **Yanflyの YEP_SkillCore** に対応。
 * - MP消費率 (`mcr`) の影響を適正に計算し、二重適用を防ぐ。
 * - **MP消費の端数は切り上げに変更。**
 */

(() => {
    'use strict';

    let pluginName = 'HalfMpSwitch';
    let parameters = PluginManager.parameters(pluginName);
    let mpHalfSwitchId = Number(parameters['mpHalfSwitchId']) || 248; // デフォルトはスイッチ248

    // YEP_SkillCore が有効かどうか判定
    let isYEP_SkillCoreEnabled = Imported.YEP_SkillCore;

    // スキルの消費MPを取得（戦闘時のMP消費に適用）
    let _Game_BattlerBase_skillMpCost = Game_BattlerBase.prototype.skillMpCost;
    Game_BattlerBase.prototype.skillMpCost = function(skill) {
        let cost = _Game_BattlerBase_skillMpCost.call(this, skill);

        // YEP_SkillCore の影響を取り除く（MP消費率 mcr を適用前に調整）
        if (isYEP_SkillCoreEnabled) {
            cost /= this.mcr;  // MP消費率（mcr）適用前にリセット
        }

        // スイッチがONのとき MP消費を半減
        if ($gameSwitches.value(mpHalfSwitchId)) {
            cost *= 0.5;
        }

        // 最終的な MP 消費率 (mcr) を適用
        if (isYEP_SkillCoreEnabled) {
            cost *= this.mcr;  
        }

        return Math.max(0, Math.ceil(cost)); // 切り上げに変更
    };

    // メニュー画面のスキル消費MP表示を変更
    let _Window_SkillList_drawMpCost = Window_SkillList.prototype.drawMpCost;
    Window_SkillList.prototype.drawMpCost = function(skill, x, y, width) {
        if (this._actor) {
            let cost = this._actor.skillMpCost(skill);

            if (cost > 0) {
                if (Yanfly.Icon.Mp > 0) {
                    let iw = x + width - Window_Base._iconWidth;
                    this.drawIcon(Yanfly.Icon.Mp, iw, y + 2);
                    width -= Window_Base._iconWidth + 2;
                }
                this.changeTextColor(this.textColor(Yanfly.Param.SCCMpTextColor));
                let fmt = Yanfly.Param.SCCMpFormat;
                let text = fmt.format(Yanfly.Util.toGroup(cost), TextManager.mpA);
                this.contents.fontSize = Yanfly.Param.SCCMpFontSize;
                this.drawText(text, x, y, width, 'right');
                this.resetFontSettings();
                return width - this.textWidth(text) - Yanfly.Param.SCCCostPadding;
            }
        }
        return _Window_SkillList_drawMpCost.call(this, skill, x, y, width);
    };

})();
