import { BaseComponent, Components } from "@flamework/components";
import { OwnerProfileData, TycoonData } from "../utility";
import { Modding, OnStart } from "@flamework/core";
import { Janitor } from "@rbxts/janitor";
import { TycoonLogger } from "./TycoonLogger";
import { TycoonService } from "./TycoonService";
import { BaseTycoonItem } from "./item/BaseTycoonItem";
import { Constructor } from "@flamework/core/out/utility";
import { Signal } from "@rbxts/signals-tooling";
export declare abstract class BaseTycoonComponent<A extends object = {}, I extends Instance = Instance, D extends TycoonData = TycoonData> extends BaseComponent<A, I> implements OnStart {
    private logger;
    private components;
    private tycoonService;
    readonly DataChanged: Signal<(newData: Readonly<D>, prevData: Readonly<D>) => void>;
    readonly Claimed: Signal<(newOwner: Player) => void>;
    readonly Unclaimed: Signal<() => void>;
    readonly OwnerChanged: Signal<(newOwner?: Player) => void>;
    readonly DataResetted: Signal<() => void>;
    private container;
    private owner?;
    private dataContrainter;
    private items;
    private itemsByInstance;
    protected readonly janitor: Janitor<void>;
    protected abstract generateData(): D;
    constructor(logger: TycoonLogger, components: Components, tycoonService: TycoonService);
    onStart(): void;
    GetItemsOfType<T extends object>(ctor: Constructor<T>, excludeLocked?: boolean): T[];
    GetItems(): BaseTycoonItem<{}, Instance, {}>[];
    private initEvents;
    private findAllItemTags;
    private initItems;
    private setupItem;
    private resetData;
    private destroyItems;
    private createOwnerProfile;
    /** @metadata macro */
    GetItem<T extends BaseTycoonItem = BaseTycoonItem>(qualifier: Instance | string, itemType?: Modding.Generic<T, "id">): T | undefined;
    GetContainer(): Folder;
    GetOwner(): OwnerProfileData | undefined;
    VerifyOwner(player?: Player): boolean;
    VerifyOwnerByCharacter(model?: Instance): boolean;
    HasOwner(): boolean;
    GetData(): Readonly<D>;
    Claim(owner: Player, data?: D): OwnerProfileData;
    Unclaim(): void;
    ResetData(): void;
    Destroy(): void;
    /** @hidden */
    destroy(): void;
}
