###############################################################################
#   @author         :   Mahasri Kalavala
#   @date           :   10/28/2017
#   @package        :   Holidays
#   @description    :   Retrieves the holiday
###############################################################################
## Modified for my own fun stuff!

homeassistant:
  customize:

    sensor.holiday:
      hidden: true
      icon: mdi:beach
      friendly_name: US Holiday
    sensor.flag:
      hidden: true
      icon: mdi:flag
      friendly_name: Flag Day

###############################################################################
# Sensor updates once every 4 hours (14400 seconds) & runs 6 times in 24 hours
#
# First it checks for holiday in static section, if that doesn't exist,
# it checks in the dynamic section. If neither exists, the value will be empty
###############################################################################
sensor:
  - platform: rest
    resource: https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/json_data/holidays.json
    name: Holiday
    scan_interval: 14400
    value_template: >
      {% set today = now().month  ~ '/' ~ now().day  %}
      {% set holiday =  value_json.MAJOR_US.static[ today ] %}
      {% if holiday | trim == "" %}
        {% set today = now().month  ~ '/' ~ now().day ~ '/' ~ now().year %}
        {% set holiday =  value_json.MAJOR_US.dynamic[ today ] %}
      {% endif %}
      {{ holiday }}

  - platform: rest
    resource: http://www.webcal.fi/cal.php?id=335&format=json&start_year=current_year&end_year=2017&tz=America%2FNew_York
    name: Flag
    scan_interval: 14400
    value_template: >-
      {% set is_flag_day = False %}
      {%- for day_val in value_json -%}
        {% set now_string = now().strftime('%Y-%m-%d') %}
        {%- if day_val.date == now_string and day_val.flag_day == 1-%}
          {% set is_flag_day = True %}
        {%- endif -%}
      {% endfor %}
      {{is_flag_day}}

###############################################################################
# Automation that notifies of a Holiday "state" change
###############################################################################
automation:
  - alias: Notify Holiday State Change
    hide_entity: false
    initial_state: true
    trigger:
      - platform: state
        entity_id:
          - sensor.holiday
    condition:
      - condition: template
        value_template: "{{ states('sensor.holiday') != 'unknown' }}"
      - condition: template
        value_template: "{{ states.sensor.holiday.state | trim != '' }}"
    action:
      - service: persistent_notification.create
        data:
          message: 'Today is {{ states.sensor.holiday.state }}.'
          title: '{{ states.sensor.holiday.state }}'

      - delay: '{{ (range(4, 8)|random|int) }}:{{ (range(1, 50)|random|int) }}:00'
      - service: script.tweet_engine
        data_template:
          tweet: >
            {{ [
            "Today is {{ states.sensor.holiday.state }}. Time to adjust the outside light colors!",
            "Today is {{ states.sensor.holiday.state }}.",
            "Is today {{ states.sensor.holiday.state }}?",
            "Just checked with Alexa & today is {{ states.sensor.holiday.state }}."
            ] | random + [
            " #DayOff",
            "(http://www.vmwareinfo.com/2017/07/my-smart-home-look-at-parts-that-make.html)",
            "(http://www.vmwareinfo.com/2017/08/diy-outdoor-smart-home-led-strips.html)",
            "#{{ states.sensor.holiday.state }}"
            ] | random }}