/*---------------------------------------------------------------------------*
 * TorigoyaMZ_Achievement2_AddonUseSaveSlot.js v.1.0.0
 *---------------------------------------------------------------------------*
 * 2020/11/26 00:53 (JST)
 *---------------------------------------------------------------------------*
 * Ruたん ( @ru_shalm )
 * https://torigoya-plugin.rutan.dev
 *---------------------------------------------------------------------------*/

/*:
 * @target MZ
 * @plugindesc 実績プラグインアドオン: セーブ別実績 (v.1.0.0)
 * @author Ruたん（ru_shalm）
 * @license public domain
 * @version 1.0.0
 * @url https://raw.githubusercontent.com/rutan/torigoya-rpg-maker-plugin/gh-pages/TorigoyaMZ_Achievement2_AddonUseSaveSlot.js
 * @base TorigoyaMZ_Achievement2
 * @orderAfter TorigoyaMZ_Achievement2
 * @help
 * 実績プラグインアドオン: セーブ別実績 (v.1.0.0)
 * https://torigoya-plugin.rutan.dev
 *
 * このプラグインは「実績プラグイン」のアドオンです。
 * 実績プラグインより下に導入してください。
 *
 * 実績をセーブ別に保存するようにします。
 * このプラグインに設定項目はありません。
 *
 * 【注意】
 * このアドオンを有効にすると、タイトル画面での実績表示は正常に動きません。
 * 実績プラグインの設定で、タイトル画面でのメニュー表示をOFFにしてください。
 */

(function () {
    'use strict';

    const Torigoya = (window.Torigoya = window.Torigoya || {});

    function getPluginName() {
        const cs = document.currentScript;
        return cs ? cs.src.split('/').pop().replace(/\.js$/, '') : 'TorigoyaMZ_Achievement2_AddonUseSaveSlot';
    }

    function readParameter() {
        const parameter = PluginManager.parameters(getPluginName());
        return {
            version: '1.0.0',
        };
    }

    function checkPlugin(obj, errorMessage) {
        if (typeof obj !== 'undefined') return;
        alert(errorMessage);
        throw errorMessage;
    }

    checkPlugin(Torigoya.Achievement2, '「実績アドオン:セーブ別実績」より上に「実績プラグイン」が導入されていません。');

    Torigoya.Achievement2.Addons = Torigoya.Achievement2.Addons || {};
    Torigoya.Achievement2.Addons.UseSaveSlot = {
        name: getPluginName(),
        parameter: readParameter(),
    };

    (() => {
        // -------------------------------------------------------------------------
        // Manager

        Torigoya.Achievement2.Manager.options.onInit = function (manager) {
            manager.setAchievements(Torigoya.Achievement2.parameter.baseAchievementData);
        };

        Torigoya.Achievement2.Manager.options.onSave = null;

        // -------------------------------------------------------------------------
        // DataManager

        const upstream_DataManager_createGameObjects = DataManager.createGameObjects;
        DataManager.createGameObjects = function () {
            upstream_DataManager_createGameObjects.apply(this);
            Torigoya.Achievement2.Manager.resetData();
        };

        const upstream_DataManager_makeSaveContents = DataManager.makeSaveContents;
        DataManager.makeSaveContents = function () {
            const contents = upstream_DataManager_makeSaveContents.apply(this);
            contents.torigoyaAchievement2 = Torigoya.Achievement2.Manager.createSaveContents();
            return contents;
        };

        const upstream_DataManager_extractSaveContents = DataManager.extractSaveContents;
        DataManager.extractSaveContents = function (contents) {
            upstream_DataManager_extractSaveContents.apply(this, arguments);

            const { torigoyaAchievement2 } = contents;
            if (torigoyaAchievement2) {
                Torigoya.Achievement2.Manager.extractSaveContents(torigoyaAchievement2);
            }
        };
    })();
})();
