export type TSurveyQuestionType = "text" | "radio";

export type TNonEmptyNumberArray = [number, ...number[]];

export type TGlobalPresets = {
  contact_name: string;
  skincare: {
    thayers_oos_before: () => number | string;
    thayers_stocked: () => number | string;
    loreal_oos_before: () => number | string;
    loreal_stocked: () => number | string;
    garnier_oos_before: () => number | string;
    garnier_stocked: () => number | string;
  };
  haircare: {
    elvive_oos_before: () => number | string;
    elvive_stocked: () => number | string;
    ever_oos_before: () => number | string;
    ever_stocked: () => number | string;
    fructis_oos_before: () => number | string;
    fructis_stocked: () => number | string;
    whole_blends_oos_before: () => number | string;
    whole_blends_stocked: () => number | string;
    carols_daughter_oos_before: () => number | string;
    carols_daughter_stocked: () => number | string;
  };
  haircolor: {
    loreal_oos_before: () => number | string;
    loreal_stocked: () => number | string;
    garnier_oos_before: () => number | string;
    garnier_stocked: () => number | string;
    darknlovely_oos_before: () => number | string;
    darknlovely_stocked: () => number | string;
  };
  colorsonic: {
    before: () => number | string;
    total_stocked: () => number | string;
  };

  maybelline: {
    total_stocked: () => number | string;
    face_oos_before: () => number | string;
    eye_oos_before: () => number | string;
    lip_oos_before: () => number | string;
  };
  essie: {
    total_stocked: () => number | string;
    oos_before: () => number | string;
  };
  loreal: {
    total_stocked: () => number | string;
    face_oos_before: () => number | string;
    eye_oos_before: () => number | string;
    lip_oos_before: () => number | string;
  };
  nyx: {
    total_stocked: () => number | string;
    face_oos_before: () => number | string;
    eye_oos_before: () => number | string;
    lip_oos_before: () => number | string;
  };
};

export type TDirectAnswer = {
  answerDependency: "directAnswer";
  answer: (storeLabel: string) => number | string;
};

export type TDependsOnAnswer = {
  answerDependency: "dependsOn";
  dependsOn: {
    keys: TNonEmptyNumberArray;
    getAnswer: (dependencyAnswers: string[]) => number | string | null;
  };
};

export type TBaseAnswerFlow = {
  sectionName?: string | RegExp;
  questionLabel: string | RegExp;
  questionType: TSurveyQuestionType;
};

export type TAnswerFlow = TBaseAnswerFlow & (TDirectAnswer | TDependsOnAnswer);
