###############################################################################
#   @author         :   Mahasri Kalavala
#   @date           :   04/15/2017
#   @package        :   Scripts
#   @description    :   Nothing but Notification Stuff!
###############################################################################
homeassistant:

notify:
  - name: ios_devices
    platform: group
    services:
      - service: ios_ipad
      - service: ios_suresh
      - service: ios_mallika
      - service: ios_srinika
      - service: ios_hasika

  # make sure you generate app password for your email if you have 2FA enabled!
  - name: notify_smtp
    platform: smtp
    server: smtp.gmail.com
    port: 587
    timeout: 15
    username: !secret smtp_username
    password: !secret smtp_password
    sender: !secret smtp_sender
    recipient: !secret smtp_recipient

  # - name: notify_aws_sns
  #   platform: aws_sns
  #   aws_access_key_id: !secret aws_access_key_id
  #   aws_secret_access_key: !secret aws_secret_access_key
  #   region_name: 'us-east-1'

  - name: file_notify
    platform: file
    filename: debug.log

  - name: telegram
    platform: telegram
    chat_id: !secret telegram_chatid

tts:
  - platform: amazon_polly
    aws_access_key_id: !secret aws_access_key_id
    aws_secret_access_key: !secret aws_secret_access_key
    region_name: "us-east-1"
    text_type: ssml
    voice: Joanna

#
# Telegram Configuration
#
telegram_bot:
  - platform: broadcast
    api_key: !secret telegram_apikey
    allowed_chat_ids:
      - !secret telegram_chatid

  - platform: polling
    api_key: !secret telegram_apikey
    parse_mode: html
    allowed_chat_ids:
      - !secret telegram_chatid

  ###############################################################################
  #   _   _       _   _  __
  #  | \ | |     | | (_)/ _|
  #  |  \| | ___ | |_ _| |_ _   _
  #  | . ` |/ _ \| __| |  _| | | |
  #  | |\  | (_) | |_| | | | |_| |
  #  |_| \_|\___/ \__|_|_|  \__, |
  #                          __/ |
  #                         |___/
  # Notify Related Scripts
  ###############################################################################
script:
  notify_family:
    sequence:
      - condition: template
        value_template: '{{ message | trim != "" }}'

      - service: script.notify_on_led_screen
        data_template:
          message: "{{ message }}"
          notify_options: "{{ notify_options }}"

      - service: script.notify_firestick
        data_template:
          url: "{{ url }}"
          title: "{{ title }}"
          message: "{{ message }}"
          notify_options: "{{ notify_options }}"

      - service: script.notify_telegram
        data_template:
          file: "{{ url }}"
          title: "{{ title }}"
          message: "{{ message }}"
          notify_options: "{{ notify_options }}"

      - service: script.notify_email
        data_template:
          title: "{{ title }}"
          message: "{{ message }}"
          notify_options: "{{ notify_options }}"

      - service: script.notify_voice
        data_template:
          message: "{{ message }}"
          notify_options: "{{ notify_options }}"

  ###############################################################################
  # NOTIFY OPTIONS
  #     1. tv
  #     2. telegram
  #     3. led
  #     4. email
  #     5. voice
  ###############################################################################

  notify_firestick:
    sequence:
      - condition: state
        entity_id: input_boolean.firetv_alerts
        state: "on"
      - condition: template
        value_template: "{{ 'tv' in notify_options }}"
      - service: notify.android_tv_fire_tv
        data:
          message: "{{ message }}"
          title: Mahasri Bot
          data:
            color: red
            duration: 7
            image:
              path: "{{ url }}" #/config/www/downloads/camera/driveway/driveway_20220604_185216.jpg
            icon:
              path: >
                /config/www/{{- [ "suresh.jpg", "srinika.jpg", "mallika.jpg", "hasika.jpg", 
                  "bob.jpg", "butters.jpg", "eric.jpg", "gene.jpg", "kyle.jpg", "linda.jpg", 
                  "lois.jpg", "louis.jpg", "meg.jpg", "morty.jpg", "peter.jpg", "quagmire.jpg", 
                  "randy.jpg", "tina.jpg" ] | random  -}}

  notify_telegram:
    sequence:
      - condition: state
        entity_id: input_boolean.telegram_notifications
        state: "on"
      - condition: template
        value_template: "{{ 'telegram' in notify_options }}"
      - service: telegram_bot.send_message
        data:
          title: "{{- title -}}"
          message: "{{- message -}}"
          data:
            photo:
              - file: "{{- file -}}"
                caption: "{{- title -}}"

  notify_email:
    sequence:
      - condition: state
        entity_id: input_boolean.email_notifications
        state: "on"
      - condition: template
        value_template: "{{ 'email' in notify_options }}"
      - service: notify.notify_smtp
        data_template:
          title: "{{ title }}"
          message: "{{ message }}"

  notify_voice:
    sequence:
      - condition: state
        entity_id: input_boolean.voice_notifications
        state: "on"
      - condition: template
        value_template: "{{ 'voice' in notify_options }}"
      - service: script.voice_notify
        data_template:
          message: "{{ message }}"

  notify_on_led_screen:
    sequence:
      - condition: state
        entity_id: input_boolean.led_notifications
        state: "on"
      - condition: template
        value_template: "{{ 'led' in notify_options }}"
      - service: mqtt.publish
        data_template:
          topic: messageboard/messages
          payload: "{{ message }}"

  ###############################################################################
  # Voice Notify
  # Conditions:
  #   => Only Announce when people are home. Except in emergency mode!
  #   => Only Announce when Music is NOT being played
  ###############################################################################
  voice_notify:
    sequence:
      - condition: template
        value_template: "{{ states('input_boolean.voice_notifications') == 'on' }}"
      - condition: template
        value_template: "{{ states('input_boolean.do_not_disturb') | lower == 'off' }}"
      - condition: template
        value_template: "{{ message | trim != '' }}"
      - condition: template
        value_template: "{{ states('input_boolean.home_mode_away') == 'off' }}"
      - condition: template
        value_template: >
          {% if only_at_night | default('no', true ) == "yes" %}
            {% if states('sun.sun') == "above_horizon" %}
              false
            {% else %}
              true
            {% endif %}
          {% else %}
            true
          {% endif %}
      - service: media_player.volume_set
        entity_id: media_player.living_room, media_player.upstairs
        data_template:
          volume_level: >
            {% if states('input_boolean.emergency_mode') == "on" %}
              {{ states('input_number.tts_volume_level_alert') }}
            {% else %}
              {% if now().hour | int < 12 and now().hour | int > 6 %}
                {{ states('input_number.tts_volume_level_morning') }}
              {% elif now().hour|int > 12 and now().hour|int < 20 %}
                {{ states('input_number.tts_volume_level_afternoon') }}
              {% else %}
                {{ states('input_number.tts_volume_level_evening') }}
              {% endif %}
            {% endif %}
      - service: tts.amazon_polly_say
        entity_id: media_player.living_room, media_player.upstairs
        data_template:
          cache: true
          message: >
            {% set msg = "" %}
            {% macro getGreeting() %}
              {% if greeting | default('yes', true ) == "yes" %}
                {% if now().hour|int < 12 %}
                  Good morning.
                {% elif now().hour|int < 18 %}
                  Good afternoon.
                {% else %}
                  Good evening.
                {% endif %}
              {% endif %}
            {% endmacro %}
            {%- macro getEndGreeting() -%}
              {%- if greeting |default('yes', true ) == "yes" -%}
                Thank you!
              {%- endif -%}
            {%- endmacro -%}
            {% set msg = msg + "<speak> " %}
            {% set msg = msg + getGreeting() %}
            {% set msg = msg + ". " + message %}
            {% set msg = msg.replace(".", " <break time='0.5s'/> ") %}
            {% set msg = msg + " " + getEndGreeting() %}
            {% set msg = msg + " </speak>" %}
            {{ msg }}

  ###############################################################################
  # Greeting
  ###############################################################################
  voice_greeting:
    sequence:
      - service: tts.amazon_polly_say
        entity_id: media_player.living_room, media_player.upstairs
        data_template:
          cache: true
          message: >
            {% set msg = "" %}
            {% macro getGreeting() %}
              {% if greeting | default('yes', true ) == "yes" %}
                {% if now().hour|int < 12 %}
                  Good morning.
                {% elif now().hour|int < 18 %}
                  Good afternoon.
                {% else %}
                  Good evening.
                {% endif %}
              {% endif %}
            {% endmacro %}
            {% set msg = msg + "<speak> " %}
            {% set msg = msg + " " + getGreeting() %}
            {% set msg = msg.replace(".", " <break time='0.5s'/> ") %}
            {% set msg = msg + " </speak>" %}
            {{ msg }}
