import { IFeatureStrategy } from './strategy';

export interface IFeatureToggleListItem {
    type: string;
    name: string;
    stale?: boolean;
    lastSeenAt?: string;
    createdAt: string;
    environments: IEnvironments[];
}

export interface IEnvironments {
    name: string;
    enabled: boolean;
}

export interface IFeatureToggle {
    stale: boolean;
    archived: boolean;
    enabled?: boolean;
    createdAt: string;
    lastSeenAt?: string;
    description?: string;
    environments: IFeatureEnvironment[];
    name: string;
    project: string;
    type: string;
    variants: IFeatureVariant[];
    impressionData: boolean;
    strategies?: IFeatureStrategy[];
}

export interface IFeatureEnvironment {
    type: string;
    name: string;
    enabled: boolean;
    strategies: IFeatureStrategy[];
}

export interface IFeatureVariant {
    name: string;
    stickiness: string;
    weight: number;
    weightType: string;
    overrides: IOverride[];
    payload?: IPayload;
}

export interface IOverride {
    contextName: string;
    values: string[];
}

export interface IPayload {
    type: string;
    value: string;
}

export interface IFeatureEnvironmentMetrics {
    environment: string;
    timestamp: string;
    yes: number;
    no: number;
}

export interface IFeatureMetrics {
    version?: number;
    maturity?: string;
    lastHourUsage: IFeatureEnvironmentMetrics[];
    seenApplications: string[];
}

export interface IFeatureMetricsRaw {
    featureName: string;
    appName: string;
    environment: string;
    timestamp: string;
    yes: number;
    no: number;
}
