import { ElementHandle } from "puppeteer";
export declare type RecordConditional<K extends keyof any, T> = {
    [P in K]?: T;
};
export declare type ResourceType = 'metal' | 'crystal' | 'deuterium' | 'energy' | 'darkmatter';
export declare const ALL_RESOURCES: ResourceType[];
export declare type ResourceList = Record<ResourceType, number>;
export interface Upgrade {
    url?: string;
    costs: ResourceList;
    time: number;
}
export declare type Status = 'disabled' | 'on' | 'off' | 'active';
export declare const ALL_STATUS: Status[];
export interface BuildingLight {
    id: number;
    status: Status;
    level: number;
    upgrade: Upgrade;
}
export declare type BuildingType = string;
export interface Building<T extends BuildingType> extends BuildingLight {
    type: T;
    __elem?: ElementHandle<Element>;
}
export declare type BuildingList<T extends BuildingType> = RecordConditional<T, Building<T>>;
export declare type MineType = 'metalMine' | 'crystalMine' | 'deuteriumSynthesizer' | 'solarPlant' | 'fusionPlant';
export declare const ALL_MINES: MineType[];
export interface Mine extends Building<MineType> {
    resource: ResourceType;
}
export declare type MineList = RecordConditional<MineType, Mine>;
export declare type StorageType = 'metalStorage' | 'crystalStorage' | 'deuteriumStorage';
export declare const ALL_STORAGES: StorageType[];
export interface Storage extends Building<StorageType> {
    capacity: number;
    resource: ResourceType;
}
export declare type StorageList = RecordConditional<StorageType, Storage>;
export interface ResourceFactoryList {
    mines: MineList;
    storages: StorageList;
}
export declare type FacilitieType = 'roboticsFactory' | 'shipyard' | 'researchLaboratory' | 'allianceDepot' | 'missileSilo' | 'naniteFactory' | 'terraformer' | 'repairDock';
export declare const ALL_FACILITIES: FacilitieType[];
export interface Facilities extends Building<FacilitieType> {
    capacity?: number;
}
export declare type FacilitiesList = RecordConditional<FacilitieType, Facilities>;
export declare type ResearchType = 'energyTechnology' | 'laserTechnology' | 'ionTechnology' | 'hyperspaceTechnology' | 'plasmaTechnology' | 'combustionDriveTechnology' | 'impulseDriveTechnology' | 'hyperspaceDriveTechnology' | 'espionageTechnology' | 'computerTechnology' | 'astrophysicsTechnology' | 'researchNetworkTechnology' | 'gravitonTechnology' | 'weaponsTechnology' | 'shieldingTechnology' | 'armorTechnology';
export declare const ALL_RESEARCH: ResearchType[];
export interface Research extends Building<ResearchType> {
}
export declare type ResearchList = RecordConditional<ResearchType, Research>;
export declare type ShipType = 'fighterLight' | 'fighterHeavy' | 'cruiser' | 'battleship' | 'interceptor' | 'bomber' | 'destroyer' | 'deathstar' | 'reaper' | 'explorer' | 'transporterSmall' | 'transporterLarge' | 'colonyShip' | 'recycler' | 'espionageProbe' | 'solarSatellite' | 'resbuggy';
export declare const ALL_BATTLE_SHIP: ShipType[];
export declare const ALL_CIVIL_SHIP: ShipType[];
export declare const ALL_SHIP: ShipType[];
export declare type ShipCategory = 'battle' | 'civil';
export interface Ship extends Building<ShipType> {
    category: ShipCategory;
}
export declare type ShipList = RecordConditional<ShipType, Ship>;
export declare type DefenseType = 'rocketLauncher' | 'laserCannonLight' | 'laserCannonHeavy' | 'gaussCannon' | 'ionCannon' | 'plasmaCannon' | 'shieldDomeSmall' | 'shieldDomeLarge' | 'missileInterceptor' | 'missileInterplanetary';
export declare const ALL_DEFENSES: DefenseType[];
export interface Defense extends Building<DefenseType> {
}
export declare type DefenseList = RecordConditional<DefenseType, Defense>;
