import { trackerStatus, stepIds, stepValidationStatus, rgScoreIds } from '@root/constants';
import {
  scoringSelectionValidation,
  dataInputValidation,
  scoringInputValidation,
  otherValidation
 } from '@root/utils/validations';

export const getStepperOptions = (t,currencyCode = '') => [
  {
    stepId: stepIds.SCORING_SELECTION,
    label: t('scoringui:stepTracker:scoringSelection'),
    section: '',
    isSubSection: false,
    showStep: true,
    status: trackerStatus.COMPLETED,
    validationStatus: stepValidationStatus.VALID,
    pageTitle: t('scoringui:pageTitles:selection'),
    showBackButton: false,
    showRequiredInfo: false,
    validationFn : scoringSelectionValidation,
    isRemovable: false,
    footerText: t('scoringui:footerText')
  },
  {
    stepId: stepIds.COMPANY_DATA_INPUTS,
    rgScoreId: rgScoreIds.BENCHMARK,
    label: t('scoringui:stepTracker:companyAndDataInputs'),
    section: '',
    isSubSection: false,
    showStep: true,
    status: trackerStatus.ACTIVE,
    validationStatus: stepValidationStatus.NOT_VALIDATED,
    pageTitle: t('scoringui:pageTitles:dataInputs'),
    showBackButton: true,
    showRequiredInfo: false,
    validationFn : dataInputValidation,
    isRemovable: false,
    footerText: t('scoringui:footerText')
  },
  {
    stepId: stepIds.SCORING_INPUTS,
    rgScoreId: rgScoreIds.STANDALONE,
    label: t('scoringui:stepTracker:scoringInputs'),
    section: '',
    isSubSection: false,
    showStep: true,
    status: trackerStatus.SELECTED,
    validationStatus: stepValidationStatus.NOT_VALIDATED,
    pageTitle: t('scoringui:pageTitles:scoringInputs'),
    showBackButton: true,
    showRequiredInfo: true,
    validationFn : scoringInputValidation,
    isRemovable: false,
    footerText: t('scoringui:footerText')
  },
  {
    stepId: stepIds.ADJUSTMENTS,
    label: t('scoringui:stepTracker:adjustments'),
    section: t('scoringui:scoringTiles:scoringSectionAddOns'),
    showStep: true,
    isSubSection: true,
    status: trackerStatus.NOT_SELECTED,
    pageTitle: t('scoringui:pageTitles:adjustments'),
    showBackButton: true,
    showRequiredInfo: false,
    validationFn : otherValidation,
    isRemovable: false,
    footerText: '',
    nestedSteps: [
      {
        stepId: stepIds.SIZE_ADJUSTMENTS,
        rgScoreId: rgScoreIds.SIZE_ADJ,
        parentStepId: stepIds.ADJUSTMENTS,
        isTileDisplay: false,
        label: t('scoringui:stepTracker:sizeAdjustments'),
        showStep: false,
        status: trackerStatus.NOT_SELECTED,
        isDisabled: true,
        validationStatus: stepValidationStatus.NOT_VALIDATED
      },
      {
        stepId: stepIds.QUALITATIVE_ADJUSTMENTS,
        rgScoreId: rgScoreIds.Q_ADJ,
        parentStepId: stepIds.ADJUSTMENTS,
        isTileDisplay: true,
        label: t('scoringui:stepTracker:qualitativeAdjustments'),
        header: t('scoringui:scoringTiles:addQualitativeAdjustments'),
        description: t('scoringui:scoringTiles:addQualitativeAdjustmentsDesc'),
        showStep: false,
        status: trackerStatus.NOT_SELECTED,
        isDisabled: false,
        validationStatus: stepValidationStatus.VALID,
        footerText: t('scoringui:footerText')
      },
      {
        stepId: stepIds.PARENT_ADJUSTMENTS,
        rgScoreId: rgScoreIds.Parent_ADJ,
        parentStepId: stepIds.ADJUSTMENTS,
        isTileDisplay: true,
        label: t('scoringui:stepTracker:parentCompanyAdjustments'),
        header: t('scoringui:scoringTiles:addParentCompanyAdjustments'),
        description: t('scoringui:scoringTiles:addParentCompanyAdjustmentsDesc'),
        showStep: false,
        status: trackerStatus.NOT_SELECTED,
        isDisabled: false,
        validationStatus: stepValidationStatus.NOT_VALIDATED,
        footerText: t('scoringui:footerText')
      },
      {
        stepId: stepIds.GOVERNMENT_SUPPORT,
        rgScoreId: rgScoreIds.GOV_ADJ,
        parentStepId: stepIds.ADJUSTMENTS,
        isTileDisplay: true,
        label: t('scoringui:stepTracker:governmentSupport'),
        header: t('scoringui:scoringTiles:addGovernmentSupport'),
        description: t('scoringui:scoringTiles:addGovernmentSupportDesc'),
        showStep: false,
        status: trackerStatus.NOT_SELECTED,
        isDisabled: false,
        validationStatus: stepValidationStatus.NOT_VALIDATED
      },
      {
        stepId: stepIds.Pd_ADJUSTMENTS,
        rgScoreId: rgScoreIds.PD_ADJ,
        parentStepId: stepIds.ADJUSTMENTS,
        isTileDisplay: true,
        label: t('scoringui:stepTracker:pdAdjustments'),
        header: t('scoringui:scoringTiles:addPDAdjustments'),
        description: t('scoringui:scoringTiles:addPDAdjustmentsDesc'),
        showStep: false,
        status: trackerStatus.NOT_SELECTED,
        validationStatus: stepValidationStatus.VALID
      }
    ]
  },
  {
    stepId: stepIds.ADDITIONAL_ADJUSTMENTS,
    label: 'Additional Adjustments',
    section: 'ADDITIONAL ADD-ONS',
    showStep: true,
    isSubSection: true,
    status: trackerStatus.NOT_SELECTED,
    pageTitle: t('scoringui:pageTitles:adjustments'),
    showBackButton: true,
    showRequiredInfo: false,
    validationFn : otherValidation,
    isRemovable: false,
    footerText: '',
    nestedSteps: [
      {
        stepId: stepIds.MAX_LIMIT,
        rgScoreId: '',
        parentStepId: stepIds.ADDITIONAL_ADJUSTMENTS,
        isTileDisplay: true,
        label: 'Max Limit',
        header: 'Add Max Limit',
        description: t('scoringui:scoringTiles:addPDAdjustmentsDesc'),
        showStep: false,
        status: trackerStatus.NOT_SELECTED,
        validationStatus: stepValidationStatus.VALID
      }
    ]
  },
  {
    stepId: stepIds.RG_SCORE,
    label: t('scoringui:stepTracker:rgScore'),
    section: '',
    isSubSection: false,
    showStep: true,
    status: trackerStatus.SELECTED,
    validationStatus: stepValidationStatus.NOT_VALIDATED,
    pageTitle: t('scoringui:pageTitles:rgScore'),
    validationFn : otherValidation,
    showBackButton: true,
    showRequiredInfo: true,
    isRemovable: false,
    footerText: t('scoringui:scoringResultsPage:currencyReportedText',{currency:currencyCode})
  }
  // {
  //   stepId: stepIds.ADDITIONAL_ANALYSIS,
  //   label: '',
  //   section: t('scoringui:scoringTiles:scoringSectionAdditionalAnalysis'),
  //   showStep: true,
  //   isSubSection: false,
  //   status: trackerStatus.NOT_SELECTED,
  //   validationStatus: stepValidationStatus.NOT_VALIDATED,
  //   pageTitle: t('scoringui:pageTitles:additionalAnalysis'),
  //   showBackButton: true,
  //   showRequiredInfo: true,
  //   footerText: t('scoringui:footerText'),
  //   nestedSteps: [
      // {
      //   stepId: stepIds.MACRO_SCENARIOS,
      //   isTileDisplay: true,
      //   label: t('scoringui:stepTracker:macroScenarios'),
      //   header: t('scoringui:scoringTiles:runMacroScenarios'),
      //   description: t('scoringui:scoringTiles:runMacroScenariosDesc'),
      //   validationFn : otherValidation,
      //   showStep: false,
      //   status: trackerStatus.NOT_SELECTED,
      //   validationStatus: stepValidationStatus.NOT_VALIDATED,
      //   isRemovable : true
      // },
      // {
      //   stepId: stepIds.LOSS_STATS,
      //   isTileDisplay: true,
      //   label: t('scoringui:stepTracker:lossStats'),
      //   header: t('scoringui:scoringTiles:runLossStats'),
      //   description: t('scoringui:scoringTiles:addQualitativeAdjustmentsDesc'),
      //   validationFn : otherValidation,
      //   showStep: false,
      //   status: trackerStatus.NOT_SELECTED,
      //   validationStatus: stepValidationStatus.NOT_VALIDATED,
      //   isRemovable : true
      // }
    // ]
  // }
];

export const getIndexOfVisibleSteps = resp => {
  const newResp = [];
  let index = 0;
  resp.forEach(step => {
    const findIndex = newResp.findIndex(i => i.stepId === step.stepId);
    if (step?.nestedSteps?.length) {
      if (!step.isSubSection) {
        const visibleSteps = step.nestedSteps.filter(({ showStep }) => showStep);
        if (visibleSteps.length) {
          const stepsWithindex = [];
          visibleSteps.forEach((obj, i) => stepsWithindex.push({...obj, index: index + i + 1 }));
          index = stepsWithindex[stepsWithindex.length - 1].index;
          newResp.push({ ...step, nestedSteps: stepsWithindex });
        }
      } else {
        findIndex === -1 && newResp.push({ ...step, index: index + 1 });
        index++;
      }
    } else if (step.showStep) {
      findIndex === -1 && newResp.push({ ...step, index: index + 1 });
      index++;
    }
  });
  return newResp;
};
