###########################################################################
#
#  Copyright 2020 Google LLC
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
###########################################################################

'''
--------------------------------------------------------------

Before running this Airflow module...

  Install StarThinker in cloud composer ( recommended ):

    From Release: pip install starthinker
    From Open Source: pip install git+https://github.com/google/starthinker

  Or push local code to the cloud composer plugins directory ( if pushing local code changes ):

    source install/deploy.sh
    4) Composer Menu
    l) Install All

--------------------------------------------------------------

  If any recipe task has "auth" set to "user" add user credentials:

    1. Ensure an RECIPE['setup']['auth']['user'] = [User Credentials JSON]

  OR

    1. Visit Airflow UI > Admin > Connections.
    2. Add an Entry called "starthinker_user", fill in the following fields. Last step paste JSON from authentication.
      - Conn Type: Google Cloud Platform
      - Project: Get from https://github.com/google/starthinker/blob/master/tutorials/cloud_project.md
      - Keyfile JSON: Get from: https://github.com/google/starthinker/blob/master/tutorials/deploy_commandline.md#optional-setup-user-credentials

--------------------------------------------------------------

  If any recipe task has "auth" set to "service" add service credentials:

    1. Ensure an RECIPE['setup']['auth']['service'] = [Service Credentials JSON]

  OR

    1. Visit Airflow UI > Admin > Connections.
    2. Add an Entry called "starthinker_service", fill in the following fields. Last step paste JSON from authentication.
      - Conn Type: Google Cloud Platform
      - Project: Get from https://github.com/google/starthinker/blob/master/tutorials/cloud_project.md
      - Keyfile JSON: Get from: https://github.com/google/starthinker/blob/master/tutorials/cloud_service.md

--------------------------------------------------------------

Test Script

Used by tests.

  - This should be called by the tests scripts only.
  - When run will generate a say hello log.

--------------------------------------------------------------

This StarThinker DAG can be extended with any additional tasks from the following sources:
  - https://google.github.io/starthinker/
  - https://github.com/google/starthinker/tree/master/dags

'''

from starthinker.airflow.factory import DAG_Factory

INPUTS = {}

RECIPE = {
  'setup': {
    'day': [
      'Mon',
      'Tue',
      'Wed',
      'Thu',
      'Fri',
      'Sat',
      'Sun'
    ],
    'hour': [
      1,
      3,
      23
    ]
  },
  'tasks': [
    {
      'hello': {
        'auth': 'user',
        'hour': [
          1
        ],
        'say': 'Hello At 1',
        'sleep': 0
      }
    },
    {
      'hello': {
        'auth': 'user',
        'hour': [
          3
        ],
        'say': 'Hello At 3',
        'sleep': 0
      }
    },
    {
      'hello': {
        'auth': 'user',
        'hour': [
        ],
        'say': 'Hello Manual',
        'sleep': 0
      }
    },
    {
      'hello': {
        'auth': 'user',
        'hour': [
          23
        ],
        'say': 'Hello At 23 Sleep',
        'sleep': 30
      }
    },
    {
      'hello': {
        'auth': 'user',
        'say': 'Hello At Anytime',
        'sleep': 0
      }
    },
    {
      'hello': {
        'auth': 'user',
        'hour': [
          1,
          3,
          23
        ],
        'say': 'Hello At 1, 3, 23',
        'sleep': 0
      }
    },
    {
      'hello': {
        'auth': 'user',
        'hour': [
          3
        ],
        'say': 'Hello At 3 Reordered',
        'sleep': 0
      }
    }
  ]
}

dag_maker = DAG_Factory('test', RECIPE, INPUTS)
dag = dag_maker.generate()

if __name__ == "__main__":
  dag_maker.print_commandline()
