import { Status } from "../../DataFrame";
import { IDIService } from "../../IDIService";
import { ResponseResult } from "../FieldChangeResult";
import { IRawSequence, ISequence, ISequenceInfo, ScenesUsedIn, ScenesUtils, SupportedTaskTypes } from "./Scenes";
import { SequenceBuilder, SequenceRequestData } from "./ScenesBuilder";
export interface IScenesService extends IDIService {
    /**
     * Returns list of sequences available in controller.
     */
    GetSequencesListAsync(): Promise<ISequenceInfo[] | ResponseResult<ScenesServiceErrorCode>>;
    /**
     * Returns details of given sequence
     * @param sequenceInfo sequence info - method GetSequencesListAsync returns this object.
     */
    GetSequenceAsync(sequenceInfo: ISequenceInfo): Promise<(ISequence & IRawSequence) | ResponseResult<ScenesServiceErrorCode>>;
    GetSequenceAsync(sequenceGuid: string): Promise<(ISequence & IRawSequence) | ResponseResult<ScenesServiceErrorCode>>;
    /**
     * Function returns helper for sequence creation, you need to pass sequence name and icon, rest of settings can be set in builder.
     * @param newSequenceName new sequence name
     * @param newSequenceIcon new sequence icon
     */
    GetSequenceBuilder(newSequenceName: string, newSequenceIcon: string): SequenceBuilder;
    GetSequenceBuilder(newSequenceName: string): SequenceBuilder;
    GetSequenceBuilder(): SequenceBuilder;
    /**
     * Creates sequence in controller, first you nedd to generate sequence using SequenceBuilder.
     * @param sequence sequence generated from SequenceBuilder
     */
    CreateSequenceAsync(sequence: SequenceRequestData): Promise<Status>;
    /**
     * Function check if given sequence is used in another sequences (as task or as argument)
     * This function should be call before deleting sequence to inform user that removing given sequence coud have inpact to scenes logic
     * @param sequenceInfo
     */
    CheckIfSequenceIsUsedInAnotherSequenceAsync(sequenceInfo: ISequenceInfo): Promise<ScenesUsedIn | ResponseResult<ScenesServiceErrorCode>>;
    CheckIfSequenceIsUsedInAnotherSequenceAsync(sequenceGuid: string): Promise<ScenesUsedIn | ResponseResult<ScenesServiceErrorCode>>;
    /**
     * Delete sequence from controller
     * @param sequenceInfo
     */
    DeleteSequenceAsync(sequenceInfo: ISequenceInfo): Promise<Status>;
    DeleteSequenceAsync(sequenceGuid: string): Promise<Status>;
    /**
     * Editing sequence in controller, first you nedd to make changes in sequence using SequenceBuilder.
     * @param sequence
     */
    EditSequenceAsync(sequence: SequenceRequestData): Promise<Status>;
    /**
     * Activate sequence (turns on)
     * @param sequenceInfo
     */
    EnableSequenceAsync(sequenceInfo: ISequenceInfo): Promise<Status>;
    EnableSequenceAsync(sequenceGuid: string): Promise<Status>;
    /**
     * Deactivate sequence (turns off)
     * @param sequenceInfo
     */
    DisableSequenceAsync(sequenceInfo: ISequenceInfo): Promise<Status>;
    DisableSequenceAsync(sequenceGuid: string): Promise<Status>;
    /**
     * Runs sequence
     * @param sequenceInfo
     */
    RunSequenceAsync(sequenceInfo: ISequenceInfo): Promise<Status>;
    RunSequenceAsync(sequenceGuid: string): Promise<Status>;
    /**
     * Returns additional functions to assist in the context of scenario building
     */
    GetUtilsAsync(): Promise<ScenesUtils>;
    GetSupportedTaskTypesAsync(): Promise<SupportedTaskTypes[]>;
}
export declare enum ScenesServiceErrorCode {
    OtherError = "OtherError",
    FatalError = "FatalError",
    NoData = "NoData",
    InvalidSceneGuid = "InvalidSceneGuid"
}
