// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {LABELS_PREFIX} from "./IssueWizardConfig.ts";

// Chromium project component prefix
const CR_PREFIX = 'Cr-';

// customized function for add additoinal data base on different categories.
export function expandDescriptions(
  category: string,
  customQuestionsAnswers: Array<string>,
  isRegression: boolean,
  description: string,
  labels: Array<any>,
  component?: string,
  ): {expandDescription:string, expandLabels:Array<any>, compVal:string} {
    let expandDescription = "";
    let expandLabels = labels;
    let compVal = component || '';
    let typeLabel = isRegression ? 'Type-Bug-Regression' : 'Type-Bug';

    if (category === 'Security') {
      typeLabel = 'Type-Bug-Security'
    }

    customQuestionsAnswers.forEach((ans) => {
      if (ans.startsWith(LABELS_PREFIX)) {
        const currentAnswer = ans.substring(LABELS_PREFIX.length);
        switch (category) {
          case 'Content':
            if (currentAnswer.split(' - ')[0] === 'Yes') {
              compVal = 'Cr-Blink';
              typeLabel = 'Type-Bug';
            } else {
              compVal = '';
              typeLabel = 'Type-Compat';
            }
            break;
          case 'Extensions / Themes':
            if (currentAnswer.split(' - ')[0] === 'Chrome Extension') {
              compVal = 'Cr-Platform-Extensions';
            } else {
              compVal = 'Cr-UI-Browser-Themes';
            }
            break;
          case 'Security':
            typeLabel = 'Type-Bug-Security';
            break;
          case 'Other':
            typeLabel = "Type-Bug";
            const issueType = currentAnswer.split(' - ')[0];
            if (issueType !== 'Not sure'){
              typeLabel = issueType;
            }
            if (issueType === 'Cr-UI-I18N') {
              compVal = 'Cr-UI-I18N';
            }
            break;
          case 'API':
            compVal = currentAnswer;
            if (compVal === "Not sure - I don't know") {
              compVal = '';
            }
            break;
        }
      } else {
        expandDescription = expandDescription + ans + "\n\n";
      }
    });

    expandDescription = expandDescription + description;

    if (typeLabel.length > 0) {
      expandLabels.push({
        label: typeLabel
      });
    }

    if (compVal.length > 0) {
      if (compVal.startsWith(CR_PREFIX)) {
        compVal = compVal.substring(CR_PREFIX.length);
        compVal = compVal.replace(/-/g, '>');
      }
    }
    return {expandDescription, expandLabels, compVal};
  }
