{% from "components/checkboxes/macro.njk" import govukCheckboxes %}

{# Ensure field name is always suffixed with [] to have it parsed consistently as an array #}
{% set fieldName = params.name | replace('[]', '') + '[]' %}

{% set fieldErrors = params.casaErrors[params.name] %}

{# Build up attributes #}
{% set mergedAttributes = params.attributes or {} %}
{% if fieldErrors %}
  {% set mergedAttributes = mergeObjects(mergedAttributes, {
    'data-validation': {fn: params.name, va: fieldErrors[0].validator} | dump
  }) %}
{% endif %}
{% set mergedAttributes = mergeObjects(mergedAttributes, {
  id: params.id if params.id else 'f-' + params.name + '-wrapper' | safe
}) %}

{# Add checked flag to chosen inputs #}
{% set mergedItems = [] %}
{% for item in params.items %}
  {% set item = mergeObjects({
    attributes: {
      'data-ga-question': params.fieldset.legend.text or params.fieldset.legend.html,
      'data-ga-answer': item.text or item.html
    }
  } if params.casaWithAnalytics else {}, item, {
    checked: true if item.checked or includes(params.casaValue, item.value) else null
  }) %}
  {% set mergedItems = (mergedItems.push(item), mergedItems) %}
{% endfor %}

{# Merge parameters #}
{% set mergedParams = mergeObjects(params, {
  name: fieldName,
  idPrefix: params.idPrefix if params.idPrefix else 'f-' + params.name,
  attributes: mergedAttributes,
  items: mergedItems,
  errorMessage: {
    text: t(params.casaErrors[params.name][0].inline, params.casaErrors[params.name][0].variables)
  } if params.casaErrors[params.name] else null
}) %}

{# Ensure that the first item has the id matching `f-<name>` in order for error summary linkage to work #}
{% if not mergedParams.items[0].id %}
  {% set mergedParams = mergeObjectsDeep(mergedParams, {
    items: [{
      id: 'f-' + params.name
    }]
  }) %}
{% endif %}

{{ govukCheckboxes(mergedParams) }}
