import { CommitmentInterface as CommitmentInterface$1, LocationInterface as LocationInterface$1, MapInterface as MapInterface$1, RoomInterface as RoomInterface$1 } from '@drincs/nqtr';
import { CharacterInterface } from '@drincs/pixi-vn';
import { ActivityBaseInternalInterface } from './interface/ActivityInterface.mjs';
import ExecutionType from './types/ExecutionType.mjs';
import NavigationAbstractInterface from './interface/navigation/NavigationAbstractClass.mjs';

interface CommitmentInterface extends CommitmentBaseInternalInterface, CommitmentInterface$1 {
}
interface CommitmentBaseInternalInterface extends ActivityBaseInternalInterface {
    /**
     * The character or characters that are in the commitment and so in the room.
     */
    readonly characters: CharacterInterface[];
    /**
     * The room where the commitment is.
     */
    readonly room: RoomInterface;
    /**
     * Execution type. If is "automatic" the onRun() runned automatically when the palayer is in the room. If is "interaction" the player must interact with the character to run the onRun() function.
     * If you set "automatic" remember to remove the commitment when it is no longer needed, because otherwise it repeats itself every time.
     */
    executionType: ExecutionType;
    /**
     * The priority. The higher the number, the higher the priority.
     * To ensure that a character is not in 2 places at the same time, if there are 2 or more valid commits at the same time and with the same character, the one with the highest priority will be chosen.
     */
    priority: number;
}

interface LocationInterface extends LocationInternalInterface, LocationInterface$1 {
}
interface LocationInternalInterface extends NavigationAbstractInterface {
    /**
     * The id of the location.
     */
    readonly id: string;
    /**
     * The map where the location is.
     */
    readonly map: MapInterface;
    /**
     * Get all rooms in the location.
     * @returns The rooms in the location.
     */
    readonly rooms: RoomInterface[];
}

interface MapInterface extends MapBaseInternalInterface, MapInterface$1 {
}
interface MapBaseInternalInterface extends NavigationAbstractInterface {
    /**
     * The id of the map.
     */
    readonly id: string;
    /**
     * Get all locations in the map.
     * @returns The locations in the map.
     */
    readonly locations: LocationInterface[];
}

interface RoomInterface extends RoomBaseInternalInterface, RoomInterface$1 {
}
interface RoomBaseInternalInterface extends NavigationAbstractInterface {
    /**
     * The id of the room.
     */
    readonly id: string;
    /**
     * The location where the room is.
     */
    readonly location: LocationInterface;
    /**
     * Get the character commitments of the room.
     */
    readonly routine: CommitmentInterface[];
    /**
     * Get the characters in the room.
     */
    readonly characters: CharacterInterface[];
}

export type { CommitmentInterface as C, LocationInterface as L, MapInterface as M, RoomInterface as R, CommitmentBaseInternalInterface as a, LocationInternalInterface as b, MapBaseInternalInterface as c, RoomBaseInternalInterface as d };
