{% from 'govuk/components/select/macro.njk' import govukSelect %}

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

{# Generate validation data- attributes #}
{% set mergedAttributes = params.attributes or {} %}
{% if fieldErrors %}
  {% set mergedAttributes = mergeObjects(mergedAttributes, {
    'data-validation': {fn: params.name, va: fieldErrors[0].validator} | dump
  }) %}
{% endif %}

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

{# Merge parameters #}
{% set mergedParams = mergeObjects(params, {
  id: params.id if params.id else 'f-' + params.name,
  attributes: mergedAttributes,
  items: mergedItems,
  errorMessage: {
    text: t(params.casaErrors[params.name][0].inline, params.casaErrors[params.name][0].variables),
    attributes: {
      'data-ga-question': params.label.text or params.label.html | striptags
    } if params.casaWithAnalytics else {}
  } if params.casaErrors[params.name].length
}) %}

{# 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 = mergeObjects(mergedParams, {
    items: [{
      id: 'f-' + params.name
    }]
  }) %}
{% endif %} #}

{{ govukSelect(mergedParams) }}
