/// <reference types="@rbxts/types" />
/// <reference types="@rbxts/compiler-types" />
import { BaseComponent, Components } from "@flamework/components";
import { IOwnerProfile, ITycoonData } 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 { Signal } from "@rbxts/signals-tooling";
export declare abstract class BaseTycoonComponent<A extends object = {}, I extends Model = Model, D extends ITycoonData = ITycoonData> extends BaseComponent<A, I> implements OnStart {
    private logger;
    private components;
    private tycoonService;
    readonly OnChangedData: Signal<(newData: Readonly<D>, prevData: Readonly<D>) => void>;
    readonly OnClaim: Signal<(newOwner: Player) => void>;
    readonly OnDisown: Signal<() => void>;
    readonly OnChangedOwner: Signal<(newOwner?: Player) => void>;
    readonly OnResetData: 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;
    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(): IOwnerProfile | undefined;
    VerifyOwner(player?: Player): boolean;
    VerifyOwnerByCharacter(model?: Instance): boolean;
    HaveOwner(): boolean;
    GetData(): Readonly<D>;
    Claim(owner: Player, data?: D): IOwnerProfile<ITycoonData>;
    Disown(): void;
    Destroy(): void;
    /** @hidden */
    destroy(): void;
}
