#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim: ai ts=4 sts=4 et sw=4 nu

from __future__ import (unicode_literals, absolute_import,
                        division, print_function)
import sys
import os

from rapidpro_controller import (get_logger, log_success, log_failure,
                                 COMPONENTS, SERVICE_COMMAND, run_command)

logger = get_logger(os.path.basename(__file__))
STARTED = []


def rollback():
    failed_to_stop = []
    for component in STARTED:
        logger.info(". stopping `{}`".format(component))
        args = [SERVICE_COMMAND, 'start', component]
        success = run_command(args) == 0
        if success:
            log_success(logger)
        else:
            failed_to_stop.append(component)
            log_failure(logger)
    if not failed_to_stop:
        logger.info("All started components now stopped.")
    else:
        logger.error("Could not stop all started components: {}"
                     .format(",".join(failed_to_stop)))


def start_all():
    logger.info("starting all rapidpro components")
    for component in COMPONENTS:
        logger.info(". starting `{}`".format(component))
        args = [SERVICE_COMMAND, 'start', component]
        success = run_command(args) == 0
        if success:
            STARTED.append(component)
            log_success(logger)
        else:
            log_failure(logger, msg="stopping previously started components")
            rollback()
            return 1

    logger.info("All components started.")
    return 0


if __name__ == '__main__':
    sys.exit(start_all())
