#!python
""" Deployment script for dstacademy's dontstarvetogether docker image.

The image requires docker engine to be installed on the host system.This script requires pyYAML to be installed (to generate the docker-compose.yml file) and docker-compose (to run the docker-compose.yml file).

This script is indended to be run in the directory in which you want to store the server data to generate most generic servers. If you need to tune the server after generation, look at https://github.com/fairplay-zone/docker-dontstarvetogether/blob/develop/docs/configuration.md for reference.
"""

__author__ = "lego_engineer"
__copyright__ = "Copyright 2018, lego_engineer"
__credits__ = ["lego_engineer"]
__license__ = "MIT"
__version__ = "1.0.0"
__maintainer__ = "lego_engineer"
__email__ = "protopeters@gmail.com"
__status__ = "Production"

from dst_server_deploy import DockerComposer, ForestServer, CaveServer
from dst_server_deploy.helpers import ask_yes_no

def main():
    """ Main function. """
    server_token = input("Please provide your server token [text] ")
    world_name = input("Please provide a world name [str] ")
    world_desc = input("Please provide a world description [str] ")
    pvp_enabled = ask_yes_no("Should PvP be enabled? ")
    caves_enabled = ask_yes_no("Should caves be enabled?")
    mods_enabled = ask_yes_no("Should mods be enabled?")
    world_customization = ask_yes_no("Do you want to customize the world generation?")
    set_lanugage = ask_yes_no("Do you want to set the server language?")
    access_controls = ask_yes_no("Do you want to customize server access controls?")
    offline_settings = ask_yes_no("Do you want to customize the server offline settings")
    set_gamemode = ask_yes_no("Do you want to customize the server gamemode?")
    vote = ask_yes_no("Do you want to customize the world voting settings?")

    # Build overworld object
    underworld = None
    overworld = ForestServer(server_token,
                             world_name,
                             world_desc,
                             pvp_enabled,
                             caves_enabled,
                             mods_enabled,
                             world_customization,
                             set_lanugage,
                             access_controls,
                             offline_settings,
                             set_gamemode,
                             vote)
    # Write env file.
    overworld.write_env_param()

    if caves_enabled:
        # Build underworld object
        underworld = CaveServer(server_token,
                                world_name,
                                world_desc,
                                pvp_enabled,
                                caves_enabled,
                                mods_enabled,
                                world_customization,
                                set_lanugage,
                                access_controls,
                                offline_settings,
                                set_gamemode,
                                vote)
        # Write env file.
        underworld.write_env_param()

    docker_compose_writer = DockerComposer(overworld, underworld)
    docker_compose_writer()

if __name__ == "__main__":
    main()
