#!/usr/bin/env python2

import sys
import os
import argparse

sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
import paella

#----------------------------------------------------------------------------------------------

class DockerSetup(paella.Setup):
    def __init__(self, nop=False, no_install=False, no_exp=False):
        self.no_install = no_install
        self.no_exp = no_exp
        paella.Setup.__init__(self, nop)

    def debian_compat(self):
        if self.no_install:
            return
        self.install("apt-transport-https ca-certificates curl gnupg-agent software-properties-common lsb-release")
        self.run("curl -fsSL https://download.docker.com/linux/{}/gpg | apt-key add -".format(self.dist))
        self.add_repo("'deb [arch=amd64] https://download.docker.com/linux/debian {} stable'".format(sh("lsb_release -cs")))
        self.run("apt-get -qq update")
        self.install("docker-ce docker-ce-cli containerd.io")

    def redhat_compat(self):
        if self.no_install:
            return   
        self.install("yum-utils device-mapper-persistent-data lvm2")
        self.add_repo("https://download.docker.com/linux/centos/docker-ce.repo")
        self.install("docker-ce docker-ce-cli containerd.io")

    def fedora(self):
        if self.no_install:
            return
        self.add_repo("https://download.docker.com/linux/fedora/docker-ce.repo")
        self.install("docker-ce docker-ce-cli containerd.io")

    def common_last(self):
        if self.no_exp:
            return
        self.install("jq moreutils")
        self.run("mkdir -p ~/.docker")
        self.run("if [ ! -f ~/.docker/config.json ]; then echo '{}' >  ~/.docker/config.json; fi")
        self.run("jq '.experimental = \"enabled\"' ~/.docker/config.json | sponge ~/.docker/config.json")
        if self.has_command("systemctl"):
            self.run("systemctl restart docker")
        else:
            self.run("service docker restart")
        pass

#----------------------------------------------------------------------------------------------

parser = argparse.ArgumentParser(description='Install Docker CE')
parser.add_argument('-n', '--nop', action="store_true", help='no operation')
parser.add_argument('--just-enable-exp', action="store_true", help='no install, just enable experimental features')
parser.add_argument('--no-exp', action="store_true", help="don't enable experimental features")
args = parser.parse_args()

DockerSetup(nop = args.nop, no_install=args.just_enable_exp, no_exp=args.no_exp).setup()
