// SPDX-FileCopyrightText: 2022 Johannes Loher
//
// SPDX-License-Identifier: MIT

import { getGame } from "../../utils/utils";
import { DS4Actor } from "./actor";
import { DS4Character } from "./character/character";
import { DS4Creature } from "./creature/creature";

const handler = {
  /**
   * @param {typeof import("./actor").DS4Actor}
   * @param {unknown[]} args
   */
  construct(_, args) {
    switch (args[0]?.type) {
      case "character":
        return new DS4Character(...args);
      case "creature":
        return new DS4Creature(...args);
      default:
        throw new Error(getGame().i18n.format("DS4.ErrorInvalidActorType", { type: args[0]?.type }));
    }
  },
};

/** @type {typeof import("./actor").DS4Actor} */
export const DS4ActorProxy = new Proxy(DS4Actor, handler);
