#!/usr/bin/env python -u
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

"""action_config_script.py

Demonstrate actions and config.
"""

from __future__ import absolute_import, print_function
import os
import sys
import time

sys.path.insert(1, os.path.dirname(sys.path[0]))

from mozharness.base.script import BaseScript


# ActionsConfigExample {{{1
class ActionsConfigExample(BaseScript):
    config_options = [
        [
            [
                "--beverage",
            ],
            {
                "action": "store",
                "dest": "beverage",
                "type": "string",
                "help": "Specify your beverage of choice",
            },
        ],
        [
            [
                "--ship-style",
            ],
            {
                "action": "store",
                "dest": "ship_style",
                "type": "choice",
                "choices": ["1", "2", "3"],
                "help": "Specify the type of ship",
            },
        ],
        [
            [
                "--long-sleep-time",
            ],
            {
                "action": "store",
                "dest": "long_sleep_time",
                "type": "int",
                "help": "Specify how long to sleep",
            },
        ],
    ]

    def __init__(self, require_config_file=False):
        super(ActionsConfigExample, self).__init__(
            config_options=self.config_options,
            all_actions=[
                "clobber",
                "nap",
                "ship-it",
            ],
            default_actions=[
                "clobber",
                "nap",
                "ship-it",
            ],
            require_config_file=require_config_file,
            config={
                "beverage": "kool-aid",
                "long_sleep_time": 3600,
                "ship_style": "1",
            },
        )

    def _sleep(self, sleep_length, interval=5):
        self.info("Sleeping %d seconds..." % sleep_length)
        counter = 0
        while counter + interval <= sleep_length:
            sys.stdout.write(".")
            try:
                time.sleep(interval)
            except:
                print
                self.error("Impatient, are we?")
                sys.exit(1)
            counter += interval
        print()
        self.info("Ok, done.")

    def _ship1(self):
        self.info(
            """
     _~
  _~ )_)_~
  )_))_))_)
  _!__!__!_
  \______t/
~~~~~~~~~~~~~
"""
        )

    def _ship2(self):
        self.info(
            """
    _4 _4
   _)_))_)
  _)_)_)_)
 _)_))_))_)_
 \_=__=__=_/
~~~~~~~~~~~~~
"""
        )

    def _ship3(self):
        self.info(
            """
 ,;;:;,
   ;;;;;
  ,:;;:;    ,'=.
  ;:;:;' .=" ,'_\\
  ':;:;,/  ,__:=@
   ';;:;  =./)_
     `"=\\_  )_"`
          ``'"`
"""
        )

    def nap(self):
        for var_name in self.config.keys():
            if var_name.startswith("random_config_key"):
                self.info("This is going to be %s!" % self.config[var_name])
        sleep_time = self.config["long_sleep_time"]
        if sleep_time > 60:
            self.info(
                "Ok, grab a %s. This is going to take a while."
                % self.config["beverage"]
            )
        else:
            self.info(
                "This will be quick, but grab a %s anyway." % self.config["beverage"]
            )
        self._sleep(self.config["long_sleep_time"])

    def ship_it(self):
        name = "_ship%s" % self.config["ship_style"]
        if hasattr(self, name):
            getattr(self, name)()


# __main__ {{{1
if __name__ == "__main__":
    actions_config_example = ActionsConfigExample()
    actions_config_example.run_and_exit()
