/**
 * Faction - Base faction class for ZeroSpace factions
 * Ported from faction.pkl with static properties for subclasses
 */
import { FactionTalent } from "./ability.js";
import { Entity } from "./entity.js";
export type FactionType = "main" | "mercenary" | "nonplayer";
/**
 * Base Faction class - extends Entity with faction-specific properties
 * Usage: new Faction("Grell", (faction) => { faction.mercHeroesAllowed = false; })
 */
export declare abstract class Faction extends Entity {
    get type(): string;
    static factionSlug: string;
    static factionName: string;
    mercHeroesAllowed: boolean;
    heroes: string[];
    units: string[];
    buildings: string[];
    guestHeroes: string[];
    topbars: Record<string, any>;
    talents: Record<string, FactionTalent>;
    commanders: Record<string, any>;
    abstract get factionType(): FactionType;
    get slug(): string;
    /**
     * Wire up unlock relationships by reading unlockedBy and setting unlocked states
     * Call this at the end of faction constructor to set up dependencies
     */
    wireUpUnlocks(): void;
    /** Get all child entity IDs for ecosystem linking - includes topbars and talents */
    get children(): Record<string, [string, string]>;
    /**
     * JSON.stringify() calls this automatically
     */
    toJSON(): Record<string, any>;
}
export declare abstract class MainFaction extends Faction {
    get subtype(): FactionType;
    get factionType(): FactionType;
    constructor();
    private addBaseFactionTalents;
    get techTree(): {
        faction: string;
        mainBase: any;
        builder: any;
        harvester: any;
        supply: any;
        tree: any;
    };
    get unitClasses(): any[];
    get buildingClasses(): any[];
}
export declare abstract class MercFaction extends Faction {
    get subtype(): FactionType;
    get factionType(): FactionType;
}
export declare abstract class NonPlayerFaction extends Faction {
    get subtype(): FactionType;
    get factionType(): FactionType;
}
//# sourceMappingURL=faction.d.ts.map