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

import React from 'react';
import { makeStyles } from '@material-ui/styles';
import { RoleSelection } from './RoleSelection/RoleSelection.tsx';
import {ISSUE_WIZARD_PERSONAS_DETAIL, IssueWizardPersona} from '../IssueWizardTypes.tsx';

const useStyles = makeStyles({
  flex: {
    display: 'flex',
    justifyContent: 'space-between',
  }
});

const getUserGroupSelectors = (
  value: IssueWizardPersona,
  onSelectorClick:
    (selector: string) =>
      (event: React.MouseEvent<HTMLElement>) => any) => {
  const selectors = new Array();
  Object.entries(ISSUE_WIZARD_PERSONAS_DETAIL).forEach(([key, persona]) => {
    selectors.push(
        <RoleSelection
          checked={IssueWizardPersona[value] === key}
          handleOnClick={onSelectorClick(key)}
          value={persona.name}
          description={persona.description}
          inputProps={{ 'aria-label': persona.name }}
        />
      );
  });
  return selectors;
}
/**
 * RadioDescription contains a set of radio buttons and descriptions (RoleSelection)
 * to be chosen from in the landing step of the Issue Wizard.
 *
 * @returns React.ReactElement
 */
type Props = {
  selectedRadio: IssueWizardPersona,
  onClickRadio: Function,
}

export const RadioDescription = (props: Props): React.ReactElement => {
  const { selectedRadio, onClickRadio } = props;
  const classes = useStyles();

  const handleRoleSelectionClick = (userGroup: string) =>
     (event: React.MouseEvent<HTMLElement>) => onClickRadio(userGroup);

  const userGroupsSelectors = getUserGroupSelectors(selectedRadio, handleRoleSelectionClick);

  return (
    <div className={classes.flex}>
      {userGroupsSelectors}
    </div>
  );
}
