import { PropertiesDefault } from "./parameterValues.d";

export interface subConditionParameterValuesProperties { // object structure for subcondition properties
    propertyName?: string;
    comparisonOperator?: string;
    propertyValue?: string;
    propertyValueInteger?: number;
    propertyValueDate?: string;
    propertyValueDateExpr?: string;
    propertyValues?: Array<string>;
    propertyValuesInteger?: Array<number> | Array<string>;
    propertyValuesDate?: Array<string>;
    propertyValuesDateExpr?: Array<string>;
    operator?: string;
    subConditions?: Array<subConditionProperties>;
    matchType?: string;
    segments?: Array<string>;
}

export interface subConditionProperties { // object structure for subconditions
    parameterValues: subConditionParameterValuesProperties;
    type: string;
}

export interface parameterValuesProperties { // object structure for parameter values
    operator: string;
    subConditions: Array<subConditionProperties>;
}

export interface conditionProperties { // object structure for certain properties in segment
    parameterValues: parameterValuesProperties;
    type: string;
}

export interface metadataProperties { // object structure for segment metadata
    id: string;
    name: string;
    description: string;
    scope: string;
    tags: Array<string>;
    systemTags: Array<string>;
    enabled: boolean;
    missingPlugins: boolean;
    hidden: boolean;
    readOnly: boolean;
}

export interface SegmentProperties { // object structure for segment
    itemId?: string;
    itemType?: string;
    version?: number;
    condition?: conditionProperties|subConditionProperties;
    metadata?: metadataProperties;
}

export interface UsedProperties { // object structure for used segment properties
    id: string;
    name: string;
    description: string;
    scope: string;
    tags: Array<string>;
    systemTags: Array<string>;
    operator: string;
    subConditions: Array<PropertiesDefault>;
}

export interface SegmentProfileCountProperties { // object structure for the profile count per segment input
    segments?: Array<string>;
    operator?: string;
}