{% from "govuk/components/fieldset/macro.njk" import govukFieldset %}
{% from "govuk/components/input/macro.njk" import govukInput %}
{% from "govuk/components/select/macro.njk" import govukSelect %}
{% from "govuk/components/error-message/macro.njk" import govukErrorMessage %}

{% set name = params.question.id %}
{% set errorMessage = params.errors[name] %}
{% set price = params.question.fields.price %}
{% set minimumPrice = params.question.fields.minimum_price %}
{% set maximumPrice = params.question.fields.maximum_price %}
{% set priceUnit = params.question.fields.price_unit %}
{% set priceInterval = params.question.fields.price_interval %}
{% set optional_fields = params.question.optional_fields or [] %}

{% call govukFieldset({
  legend: {
    html: params.question.question,
    classes: "govuk-fieldset__legend--m"
  },
  classes: 'dm-pricing'
}) %}
  {% if params.question.question_advice %}
    <p class="govuk-body">
      {{ params.question.question_advice }}
    </p>
  {% endif %}

  <div class="govuk-form-group {%- if errorMessage %} govuk-form-group--error{% endif %}">
    {% if errorMessage %}
      {{ govukErrorMessage({
        text: errorMessage["message"],
        id: "input-" + name
      }) }}
    {% endif %}

    {% if priceUnit %}
      {% set questionText = "Unit (optional)" if 'price_unit' in optional_fields else "Unit" %}
      {% set value = params.data[priceUnit] %}

      {% set units = params.question.units or [
        {
          label: "a unit",
          value: "Unit"
        },
        {
          label: "a licence",
          value: "Licence"
        },
        {
          label: "a user",
          value: "User"
        },
        {
          label: "a device",
          value: "Device"
        },
        {
          label: "a instance",
          value: "Instance"
        },
        {
          label: "a server",
          value: "Server"
        },
        {
          label: "a virtual machine",
          value: "Virtual machine"
        },
        {
          label: "a transaction",
          value: "Transaction"
        },
        {
          label: "a megabyte",
          value: "Megabyte"
        },
        {
          label: "a gigabyte",
          value: "Gigabyte"
        },
        {
          label: "a terabyte",
          value: "Terabyte"
        }
      ] %}

      {% set items = [] %}

      {% set _items = items.push({
        text: "",
        value: "",
        selected: "" == value
      }) %}

      {% for unit in units %}
        {% set unit_value = unit.value if unit.value else unit.label %}
        {% set _items = items.push({
          text: unit.label,
          value: unit_value,
          selected: unit_value == value
        }) %}
      {% endfor %}

      {{ govukSelect({
        id: "input-" + priceUnit,
        name: priceUnit,
        label: {
          html: questionText
        },
        items: items
      }) }}
    {% endif %}

    {% if priceInterval %}
      {% set questionText = "Time (optional)" if 'price_interval' in optional_fields else "Time" %}
      {% set value = params.data[priceInterval] %}

      {% set intervals = params.question.intervals or [
        {
          label: "a second",
          value: "Second"
        },
        {
          label: "a minute",
          value: "Minute"
        },
        {
          label: "a hour",
          value: "Hour"
        },
        {
          label: "a day",
          value: "Day"
        },
        {
          label: "a week",
          value: "Week"
        },
        {
          label: "a month",
          value: "Month"
        },
        {
          label: "a quarter",
          value: "Quarter"
        },
        {
          label: "a 6 months",
          value: "6 months"
        },
        {
          label: "a year",
          value: "Year"
        }
      ] %}

      {% set items = [] %}

      {% set _items = items.push({
        text: "",
        value: "",
        selected: "" == value
      }) %}

      {% for interval in intervals %}
        {% set interval_value = interval.value if interval.value else interval.label %}
        {% set _items = items.push({
          text: interval.label,
          value: interval_value,
          selected: interval_value == value
        }) %}
      {% endfor %}

      {{ govukSelect({
        id: "input-" + priceInterval,
        name: priceInterval,
        label: {
          text: questionText
        },
        items: items
      }) }}
    {% endif %}

    {% if price %}
      {% set questionText = "Price (optional)" if 'price' in optional_fields else "Price" %}
      {% set value = params.data[price] %}

      {{ govukInput({
        id: "input-" + price,
        name: price,
        classes: "govuk-input--width-10",
        label: {
          text: questionText
        },
        hint: {
          text: 'For example, £199.99'
        },
        value: value,
        prefix: {
          text: "£"
        }
      }) }}
    {% endif %}

    {% if minimumPrice %}
      {% set questionText = "Minimum price (optional)" if 'minimum_price' in optional_fields else "Minimum price" %}
      {% set value = params.data[minimumPrice] %}

      {{ govukInput({
        id: "input-" + minimumPrice,
        name: minimumPrice,
        classes: "govuk-input--width-10",
        label: {
          text: questionText
        },
        hint: {
          text: 'For example, £199.99'
        },
        value: value,
        prefix: {
          text: "£"
        }
      }) }}
    {% endif %}

    {% if maximumPrice %}
      {% set questionText = "Maximum price (optional)" if 'maximum_price' in optional_fields else "Maximum price" %}
      {% set value = params.data[maximumPrice] %}

      {{ govukInput({
        id: "input-" + maximumPrice,
        name: maximumPrice,
        classes: "govuk-input--width-10",
        label: {
          text: questionText
        },
        hint: {
          text: 'For example, £199.99'
        },
        value: value,
        prefix: {
          text: "£"
        }
      }) }}
    {% endif %}
  </div>
{% endcall %}
