- id: track_volume_group_off
  alias: "CCA: Track volume (group [off])"
  trigger:
  - platform: state
    entity_id: sensor.all_my_speakers, sensor.kitchen_speakers, sensor.main_speakers
  condition:
  - condition: template
    value_template: "{{ states('media_player.%s'|format(trigger.to_state.object_id)) in ['off', 'unavailable'] }}"
  action:
  - service: input_number.set_value
    data_template:
      entity_id: "{{ 'input_number.%s'|format(trigger.to_state.object_id) }}"
      value: "{{ states('sensor.%s'|format(trigger.to_state.object_id)) }}"



# all volumes are the same --> track and normalize
- id: track_and_normalize_volume_group
  alias: "CCA: Track and normalize volume (group)"
  trigger:
  - platform: state
    entity_id: media_player.all_my_speakers, media_player.kitchen_speakers, media_player.main_speakers
  condition:
    condition: and
    conditions:
    - condition: template
      value_template: "{{ trigger.to_state.attributes.volume_level is defined and trigger.to_state.attributes.volume_level | multiply(100) | round(0) | int != states('input_number.%s'|format(trigger.to_state.object_id)) | int }}"
    - condition: template
      value_template: >
        {%- for entity_id in states.group[trigger.to_state.object_id].attributes.entity_id if states(entity_id) != states('input_number.%s'|format(trigger.to_state.object_id)) -%}
        {%- if loop.first -%}false{%- endif -%}
        {%- else -%}
        true
        {%- endfor -%}
  action:
  # 1) Set group tracker
  - service: input_number.set_value
    data_template:
      entity_id: "{{ 'input_number.%s'|format(trigger.to_state.object_id) }}"
      value: "{{ trigger.to_state.attributes.volume_level | multiply(100) | round(0) | int }}"

  # 2) Set individual volumes
  - service: media_player.volume_set
    data_template:
      entity_id: >
        {%- for entity_id in states.group[trigger.to_state.object_id].attributes.entity_id -%}
        {{ entity_id|replace('input_number', 'media_player') }}
        {%- if not loop.last -%}, {%- endif -%}
        {%- endfor -%}
      volume_level: "{{ trigger.to_state.attributes.volume_level }}"

  # 3) Set individual trackers
  - service: input_number.set_value
    data_template:
      entity_id: >
        {%- for entity_id in states.group[trigger.to_state.object_id].attributes.entity_id -%}
        {{ entity_id }}
        {%- if not loop.last -%}, {%- endif -%}
        {%- endfor -%}
      value: "{{ trigger.to_state.attributes.volume_level | multiply(100) | round(0) | int }}"



# all volumes are NOT the same --> normalize only
- id: normalize_volume_group
  alias: "CCA: Normalize volume (group)"
  trigger:
  - platform: state
    entity_id: media_player.all_my_speakers, media_player.kitchen_speakers, media_player.main_speakers
  condition:
    condition: and
    conditions:
    - condition: template
      value_template: "{{ trigger.to_state.attributes.volume_level is defined and trigger.to_state.attributes.volume_level | multiply(100) | round(0) | int != states('input_number.%s'|format(trigger.to_state.object_id)) | int }}"
    - condition: template
      value_template: >
        {%- for entity_id in states.group[trigger.to_state.object_id].attributes.entity_id if states(entity_id) != states('input_number.%s'|format(trigger.to_state.object_id)) -%}
        {%- if loop.first -%}true{%- endif -%}
        {%- else -%}
        false
        {%- endfor -%}
  action:
  # 1) Set individual volumes
  - service: media_player.volume_set
    data_template:
      entity_id: >
        {%- for entity_id in states.group[trigger.to_state.object_id].attributes.entity_id -%}
        {{ entity_id|replace('input_number', 'media_player') }}
        {%- if not loop.last -%}, {%- endif -%}
        {%- endfor -%}
      volume_level: "{{ states('input_number.%s'|format(trigger.to_state.object_id)) | multiply(0.01) }}"

  # 2) Set individual trackers
  - service: input_number.set_value
    data_template:
      entity_id: >
        {%- for entity_id in states.group[trigger.to_state.object_id].attributes.entity_id -%}
        {{ entity_id }}
        {%- if not loop.last -%}, {%- endif -%}
        {%- endfor -%}
      value: "{{ states('input_number.%s'|format(trigger.to_state.object_id)) }}"
