#-------------------------------------------
# Speech Processing Script
# Description: Sends notifications to ChromeCast Audio devices
#
# Features:
# - Operates during specified hours
# - Only activates when family is home or guest mode is on
# - Adjustable volume based on time of day
#
# Usage:
#   action: 
#     service: script.speech_engine
#     data:
#       media_player: [target_media_player]
#       speech_message: [message_to_speak]
#
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
# Follow me on https://www.vcloudinfo.com/click-here
#-------------------------------------------

speech_processing:
  mode: queued
  sequence:

    - event: openai_instructions_sent
      event_data:
        instructions: "{{ speech_message | striptags }}"
  
    - condition: and
      conditions:
        - condition: or
          conditions:
            - condition: state
              entity_id: group.family
              state: 'home'
            - condition: state
              entity_id: input_boolean.guest_mode
              state: 'on'
        - condition: or
          conditions:
            - condition: and
              conditions:
                - condition: state
                  entity_id: group.bed
                  state: 'off'
                - condition: time
                  after: '08:00:00'
                  before: '22:00:00'
            - condition: state
              entity_id: input_boolean.alert_mode
              state: 'on'
        - condition: state
          entity_id: input_boolean.speech_notifications
          state: 'on'

    - service: switch.turn_on
      entity_id: switch.lr_amp

    - service: media_player.volume_set
      data:
        entity_id: >
          {{ media_player }}
        volume_level: >-
          {% if now().strftime('%H')|int < 12 and now().strftime('%H')|int > 6 %}
            0.2
          {% elif now().strftime('%H')|int > 12 and now().strftime('%H')|int < 20 %}
            0.3
          {% else %}
            0.2
          {% endif %}

    - service: conversation.process
      data:
        agent_id: conversation.openai_conversation
        text: >- 
          {{ speech_message }}
      response_variable: agent

    - service: tts.cloud_say
      data:
        entity_id: media_player.livingroomCC
        options: 
          voice: JennyNeural
        message: >-
              {{ agent.response.speech.plain.speech }}
        cache: true

    - event: openai_response
      event_data:
        response: "{{ now().strftime('%B %d,%Y %-I:%M %p') }} {{ agent.response.speech.plain.speech }}"

    - service: input_boolean.turn_off
      data:
        entity_id:
          - input_boolean.alert_mode
          - input_boolean.lastmsg