/* Options:
Date: 2025-06-02 06:56:53
Version: 8.71
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://team.evovoice.io

//GlobalNamespace: 
//MakePropertiesOptional: False
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: ExportPackage.*
//ExcludeTypes: 
//DefaultImports: 
*/



export class NodeParameterMap
{
    [key:string] : NodeParameter;

    public constructor(init?: Partial<NodeParameterMap>) { (Object as any).assign(this, init); }
}


export interface IReturn<T>
{
    createResponse(): T;
}

export class Struct
{

    public constructor(init?: Partial<Struct>) { (Object as any).assign(this, init); }
}

export class Value
{
    public boolValue?: boolean;
    public stringValue: string;
    public numberValue?: number;
    public listValue: Struct[];
    public structValue: Struct;

    public constructor(init?: Partial<Value>) { (Object as any).assign(this, init); }
}

export enum UserDataFieldModes
{
    Hidden = 'Hidden',
    ReadOnly = 'ReadOnly',
    ReadWrite = 'ReadWrite',
}

export enum EndpointTypes
{
    PhoneNumber = 'PhoneNumber',
    User = 'User',
    FaxNumber = 'FaxNumber',
    EmailAddress = 'EmailAddress',
    Unused_1 = 'Unused_1',
    Unused_2 = 'Unused_2',
    Unused_3 = 'Unused_3',
    Unused_4 = 'Unused_4',
    Unused_5 = 'Unused_5',
    Team = 'Team',
    Assistant = 'Assistant',
}

export enum ValueTypes
{
    NotSpecified = 'NotSpecified',
    String = 'String',
    Boolean = 'Boolean',
    Number = 'Number',
    List = 'List',
    Struct = 'Struct',
    Transition = 'Transition',
    Custom = 'Custom',
    Date = 'Date',
    AudioFile = 'AudioFile',
    TimeZoneId = 'TimeZoneId',
    PhoneNumber = 'PhoneNumber',
    User = 'User',
    Endpoint = 'Endpoint',
    Time = 'Time',
    File = 'File',
    FaxNumber = 'FaxNumber',
    EmailAccount = 'EmailAccount',
    Customer = 'Customer',
    Flow = 'Flow',
    Team = 'Team',
    FlowReference = 'FlowReference',
    Integration = 'Integration',
    Assistant = 'Assistant',
}

export enum UIHints
{
    None = 'None',
    LargeText = 'LargeText',
    InlineForm = 'InlineForm',
    Password = 'Password',
    InlineStruct = 'InlineStruct',
}

export enum DataFieldUniqueness
{
    NotUnique = 'NotUnique',
    Unique = 'Unique',
    UniqueToCustomer = 'UniqueToCustomer',
}

export class DataField
{
    public id: string;
    public name: string;
    public type: ValueTypes;
    public uiHint: UIHints;
    public uiTab: string;
    public isAsync: boolean;
    public disableBinding: boolean;
    public structType: DataType;
    public listType: DataType;
    public description: string;
    public possibleValues: string[];
    public isOutput: boolean;
    public customFieldValuesUrl: string;
    public defaultValue: Value;
    public transitionNameFormat: string;
    public uniqueness: DataFieldUniqueness;
    public voiceOnly: boolean;
    public conditionalVisibilityField: string;
    public conditionalVisibilityValue: string;
    public noEvalTemplate: boolean;
    public userMode: UserDataFieldModes;
    public anyValueType: boolean;

    public constructor(init?: Partial<DataField>) { (Object as any).assign(this, init); }
}

export class DataType
{
    public typeName: string;
    public fields: DataField[];

    public constructor(init?: Partial<DataType>) { (Object as any).assign(this, init); }
}

export class SystemSettingsField extends DataField
{
    public value: Value;

    public constructor(init?: Partial<SystemSettingsField>) { super(init); (Object as any).assign(this, init); }
}

export class CustomerDataField extends DataField
{
    public showInSearch: boolean;

    public constructor(init?: Partial<CustomerDataField>) { super(init); (Object as any).assign(this, init); }
}

export class EndpointDataField extends DataField
{
    public showInSearch: boolean;
    public showInLists: boolean;
    public endpointType?: EndpointTypes;
    public isCallerId: boolean;
    public isKnob: boolean;

    public constructor(init?: Partial<EndpointDataField>) { super(init); (Object as any).assign(this, init); }
}

export class FlowInfo extends EntityInfo
{
    /** @description The name of this flow */
    // @ApiMember(Description="The name of this flow")
    public name: string;

    /** @description The roles that this flow has */
    // @ApiMember(Description="The roles that this flow has")
    public roles: FlowRoles[];

    /** @description What this flow does */
    // @ApiMember(Description="What this flow does")
    public description: string;

    /** @description Any notes for this flow */
    // @ApiMember(Description="Any notes for this flow")
    public notes: string;

    /** @description The ID of the account associated with the flow */
    // @ApiMember(Description="The ID of the account associated with the flow")
    public accountId: string;

    /** @description The name of the account associated with the flow */
    // @ApiMember(Description="The name of the account associated with the flow")
    public accountName: string;

    /** @description The ID of the customer this flow is associated with */
    // @ApiMember(Description="The ID of the customer this flow is associated with")
    public customerId: string;

    /** @description The name of the customer this flow is associated with */
    // @ApiMember(Description="The name of the customer this flow is associated with")
    public customerName: string;

    /** @description The breadcrumb to the flow for this endpoint */
    // @ApiMember(Description="The breadcrumb to the flow for this endpoint")
    public customerBreadcrumb: CustomerBreadcrumb[];

    /** @description The nodes in this flow */
    // @ApiMember(Description="The nodes in this flow")
    public nodes: FlowNode[];

    /** @description The flow's parameters */
    // @ApiMember(Description="The flow's parameters")
    public parameters: FlowParameter[];

    /** @description The flow's exits */
    // @ApiMember(Description="The flow's exits")
    public exits: FlowExit[];

    /** @description The UI data for the flow */
    // @ApiMember(Description="The UI data for the flow")
    public ui: FlowUI;

    /** @description The list of tags for this flow */
    // @ApiMember(Description="The list of tags for this flow")
    public tags: Tag[];

    /** @description The number of nodes in this flow */
    // @ApiMember(Description="The number of nodes in this flow")
    public nodeCount: number;

    public constructor(init?: Partial<FlowInfo>) { super(init); (Object as any).assign(this, init); }
}

export class PackageInfo
{
    public flows: FlowInfo[];
    public customerFields: CustomerDataField[];
    public endpointFields: EndpointDataField[];
    public systemFields: SystemSettingsField[];

    public constructor(init?: Partial<PackageInfo>) { (Object as any).assign(this, init); }
}

/** @description Export the specified flows into a package */
// @Route("/packages", "GET")
// @Api(Description="Export the specified flows into a package")
export class ExportPackage implements IReturn<PackageInfo>
{
    /** @description The ID of the account */
    // @ApiMember(Description="The ID of the account")
    public accountId: string;

    /** @description The IDs of the flows to export */
    // @ApiMember(Description="The IDs of the flows to export")
    public flowIds: string[];

    /** @description Include all custom fields */
    // @ApiMember(Description="Include all custom fields")
    public includeAllCustomFields: boolean;

    public constructor(init?: Partial<ExportPackage>) { (Object as any).assign(this, init); }
    public getTypeName() { return 'ExportPackage'; }
    public getMethod() { return 'GET'; }
    public createResponse() { return new PackageInfo(); }
}