import { a as StorageElementType } from './StorageElementType-DkJ394kq.cjs';

/**
 * StoredClassModel is a abstract class that contains the methods to store a class in the game.
 * I suggest you extend this class to create your own stored class.
 * @example
 * ```typescript
 * export class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {
 *     constructor(id: string, props: CharacterBaseModelProps) {
 *         super("___character___", id)
 *         this.defaultName = props.name
 *         this.defaultSurname = props.surname
 *     }
 *     private defaultName: string = ""
 *     get name(): string {
 *         return this.getStorageProperty<string>("name") || this.defaultName
 *     }
 *     set name(value: string) {
 *         this.setStorageProperty<string>("name", value)
 *     }
 *     private defaultSurname?: string
 *     get surname(): string | undefined {
 *         return this.getStorageProperty<string>("surname") || this.defaultSurname
 *     }
 *     set surname(value: string | undefined) {
 *         this.setStorageProperty<string>("surname", value)
 *     }
 * }
 * ```
 */
declare class StoredClassModel {
    /**
     * @param categoryId The id of the category. For example if you are storing a character class, you can use "characters" as categoryId. so all instances of the character class will be stored in the "characters" category.
     * @param id The id of instance of the class. This id must be unique for the category.
     */
    constructor(categoryId: string, id: string);
    protected migrateOldStorage(oldCategoryId?: string): void;
    /**
     * Is id of the stored class. is unique for this class.
     */
    readonly id: string;
    private categoryId;
    /**
     * @deprecated Remove the type parameter, it is not needed and it is not used in the implementation.
     */
    protected setStorageProperty<T>(propertyName: string, value: StorageElementType): void;
    /**
     * Get a property from the storage.
     * @param propertyName The name of the property to get.
     * @param idToUse The id of the instance to get the property. @default this.id
     * @returns The value of the property. If the property is not found, returns undefined.
     */
    protected getStorageProperty<T = StorageElementType>(propertyName: string, idToUse?: string): T | undefined;
}

export { StoredClassModel as S };
