// DarkPlasma_Promise_Menu_System 1.0.0
// Copyright (c) 2021 DarkPlasma

/**
 * 2021/03/06 1.0.0 初版
 */

/*:ja
 * @plugindesc Promise用システムメニュー
 * @author DarkPlasma
 * @license No License
 *
 * @target MZ
 *
 * @orderAfter SceneGlossary
 *
 * @param helpText
 * @desc 選択肢に表示するヘルプの名前
 * @text ヘルプ選択肢
 * @type string
 * @default ヘルプ
 *
 * @param backText
 * @desc 選択肢に表示する戻るの名前
 * @text 戻る選択肢
 * @type string
 * @default ゲームに戻る
 *
 * @help
 * version: 1.0.0
 * Promise用にシステムメニューシーンを実現する。
 * システムメニューシーンは以下の3つの選択肢を表示する。
 *
 * - ヘルプ
 * - オプション
 * - ゲーム終了
 *
 * DarkPlasma_MenuLayout の設定 メニューコマンドにその他のシーンで
 * Scene_SystemMenu を追加してください。
 */

(() => {
  'use strict';

  const pluginName = document.currentScript.src.replace(/^.*\/(.*).js$/, function () {
    return arguments[1];
  });

  const pluginParameters = PluginManager.parameters(pluginName);

  const settings = {
    helpText: String(pluginParameters.helpText || 'ヘルプ'),
    backText: String(pluginParameters.backText || 'ゲームに戻る'),
  };

  const GLOSSARY_TYPE = 1;

  class Scene_SystemMenu extends Scene_MenuBase {
    create() {
      super.create();
      this.createCommandWindow();
    }

    createCommandWindow() {
      this._commandWindow = new Window_SystemMenu(this.commandWindowRect());
      this._commandWindow.setHandler('toHelp', this.commandToHelp.bind(this));
      this._commandWindow.setHandler('toOptions', this.commandToOptions.bind(this));
      this._commandWindow.setHandler('toGameEnd', this.commandToGameEnd.bind(this));
      this._commandWindow.setHandler('cancel', this.popScene.bind(this));
      this.addWindow(this._commandWindow);
    }

    commandWindowRect() {
      const width = this.mainCommandWidth();
      const height = this.calcWindowHeight(4, true);
      return new Rectangle((Graphics.boxWidth - width) / 2, (Graphics.boxHeight - height) / 2, width, height);
    }

    commandToHelp() {
      $gameParty.setSelectedGlossaryType(GLOSSARY_TYPE);
      SceneManager.push(Scene_Glossary);
    }

    commandToOptions() {
      SceneManager.push(Scene_Options);
    }

    commandToGameEnd() {
      SceneManager.push(Scene_GameEnd);
    }
  }

  window.Scene_SystemMenu = Scene_SystemMenu;

  class Window_SystemMenu extends Window_Command {
    constructor(rect) {
      super(rect);
      this.openness = 0;
      this.open();
    }

    makeCommandList() {
      this.addCommand(settings.helpText, 'toHelp');
      this.addCommand(TextManager.options, 'toOptions');
      this.addCommand(TextManager.gameEnd, 'toGameEnd');
      this.addCommand(settings.backText, 'cancel');
    }
  }
})();
