import Component from '@glimmer/component';
import { action } from '@ember/object';
import { HTMLElementEvent } from 'forms';
interface CheckboxGridArgs {
  name: string;
  label: string;
  subText?: string;
  fields: Field[];
  value: string[] | undefined;
  onChange: (name: string, value: string[]) => void;
}
interface Field {
  key: string;
  label: string;
}
/**
 * @module CheckboxGrid
 * CheckboxGrid components are used to allow users to select any
 * number of predetermined options, aligned in a 3-column grid.
 *
 * @example
 * ```js
 * 
 * ```
 */
export default class CheckboxGrid extends Component {
  get checkboxes() {
    const list = this.args.value || [];
    return this.args.fields.map((field) => ({
      ...field,
      value: list.includes(field.key),
    }));
  }
  @action checkboxChange(event: HTMLElementEvent) {
    const list = this.args.value || [];
    const checkboxName = event.target.id;
    const checkboxVal = event.target.checked;
    const idx = list.indexOf(checkboxName);
    if (checkboxVal === true && idx < 0) {
      list.push(checkboxName);
    } else if (checkboxVal === false && idx >= 0) {
      list.splice(idx, 1);
    }
    this.args.onChange(this.args.name, list);
  }
}