{ lib, ...}:
let
  statecond = cond: { # cond must be a list
    condition = "template";
    value_template = "{{ trigger.to_state.state in ( " +
      (lib.concatMapStringsSep "," (x: "'${x}'") cond) + ") }}";
    };
  vol_change = 0.030;

  max_repeat = "30"; # max loops to repeat before bailing out
  remote = "sensor.wohnzimmer_sound1_action";
  player = "media_player.living_room";
  last_state_sensor_name = "last_rotation_action";
  last_state_sensor = "input_text.last_rotation_action";
  #      - service: media_player.volume_set
  #    target:
  #      entity_id: media_player.kitchen
  #    data:
  #      volume_level: {{ state_attr('media_player.kitchen', 'volume_level') + 0.02 }}
  rotate_stop = "brightness_stop";
  rotate_right = "brightness_move_up";
  rotate_left = "brightness_move_down" ;
  
  single_click = "toggle";
  double_click = "brightness_step_up";
  triple_click = "brightness_step_down";
in {
  services.home-assistant.config.input_text."${last_state_sensor_name}".name = "Last action of the wohnzimmer";
  services.home-assistant.config.automation = [
    {
      trigger = {
        platform = "state";
        entity_id = remote;
        to = [ rotate_stop ];
      };
      action = [
          { service = "input_text.set_value";
            target.entity_id = last_state_sensor;
            data.value = "stop";
          }
      ];
    }
    {
      alias = "Perform Actions with ${remote}";
      trigger = {
        platform = "state";
        entity_id = remote;
        to = [ single_click double_click triple_click rotate_left rotate_right ];
      };
      #mode = "queued";
      #max = 5;
      mode = "single";
      #max_exceeded = "silent";
      action = [
        {
          choose = [
            {
              conditions = statecond [ single_click ];
              sequence = [
                { service = "media_player.media_play_pause";
                target.entity_id = player;
                }
              ];
            }
            {
              conditions = statecond [ rotate_left rotate_right ];
              sequence = let
                vol_up = toString vol_change;
                vol_down = toString (-1 * vol_change);
              in [
                {
                  variables.nextvol = ''{% if trigger.to_state.state in ( "${rotate_left}" ) -%} ${vol_down} {% else -%} ${vol_up} {% endif -%}'';
                  variables.state = ''{% if trigger.to_state.state in ( "${rotate_left}" ) -%} left {% else -%} right {% endif -%}'';
                }
                { service = "input_text.set_value";
                  target.entity_id = last_state_sensor;
                  data.value = ''{{ state }}'';
                }
                {
                  repeat = {
                    sequence = [
                      { service = "media_player.volume_set";
                        target.entity_id = player;
                        data.volume_level = ''{{ state_attr("${player}","volume_level")  + (nextvol|float) }}'';
                      }
                      { delay.milliseconds = "150"; }
                    ];
                    while = [
                      {
                          condition = "template";
                          value_template = ''{{ states("${last_state_sensor}") == state }}'';
                      }
                      {
                        condition = "template";
                        value_template = "{{ repeat.index <= ${max_repeat}}}";
                      }
                    ];
                  };
                }
              ];
            }
          ];
        }
      ];
    }
  ];
}
