export interface IHypervisorOptions {
    uri: string;
}

export class Hypervisor {

    constructor(options: IHypervisorOptions);

    public connectOpen(): Promise<void>;
    public connectClose(): Promise<void>;
    public connectListDomains(): Promise<number[]>;
    public connectListDefinedDomains(): Promise<string[]>;

    public domainCreateXML(xml: string): Promise<Domain>;
    public domainDefineXML(xml: string): Promise<Domain>;
    public domainGetInfo(domain: Domain): Promise<DomainInfo>;
    public domainGetName(domain: Domain): Promise<string>;
    public domainLookupByID(id: number): Promise<Domain>;

}

export class Domain {}

export const enum DomainState {
    VIR_DOMAIN_NOSTATE,
    VIR_DOMAIN_RUNNING,
    VIR_DOMAIN_BLOCKED,
    VIR_DOMAIN_PAUSED,
    VIR_DOMAIN_SHUTDOWN,
    VIR_DOMAIN_SHUTOFF,
    VIR_DOMAIN_CRASHED,
    VIR_DOMAIN_PMSUSPENDED,
}

export interface DomainInfo {
    state: DomainState;
    maxMem: number;
    memory: number;
    nrVirtCpu: number;
    cpuTime: number;
}
