from invoke import task
from invoke import tasks
import os
from datetime import datetime as dt

IP=os.environ.get('LUANTI_IP')
USER=os.environ.get('LUANTI_USER')
HOME=os.environ.get('LUANTI_HOME')
LOCAL_HOME=os.environ.get('HOME')

TODAY = dt.now().strftime('%Y.%m.%d')

USER_AT_IP=f'{USER}@{IP}'
SSH=f'ssh {USER}@{IP}'
SCP=f'scp {USER}@{IP}'

DATE_TAR=f'{TODAY}.tar'

# Minecraft
LOCAL_BACKUPS=f'{LOCAL_HOME}/backup/minecraft'

MINECRAFT=f'{HOME}/Minecraft'

dims = ['world', 'world_nether', 'world_the_end']

@task
def compress_world(c):
    for world in dims:
        c.run(f'{SSH} -C tar cf /tmp/{world}.{DATE_TAR} --directory={MINECRAFT} {world}')
    c.run(f'{SSH} -C ls /tmp | grep .tar')


@task(compress_world)
def backup(c):
    stopped = input("Is the server stopped?")
    if(stopped != 'y'):
        print("so go stop the server...")
        exit()
    c.run(f'mkdir -p {LOCAL_BACKUPS}')

    for world in dims:
        c.run(f'{SCP}:/tmp/{world}.{DATE_TAR} {LOCAL_BACKUPS}')

    c.run(f'ls -lh {LOCAL_BACKUPS} | grep .tar')
    verify_backup(c)

@task
def verify_backup(c):
    for world in dims:
        c.run(f'tar tvf {LOCAL_BACKUPS}/{world}.{DATE_TAR} | tail')
        c.run(f'tar tvf {LOCAL_BACKUPS}/{world}.{DATE_TAR} | wc')

@task
def check_server(c):
    result = c.run(f'ssh {USER}@{IP} -C screen -ls')

@task(verify_backup)
def serve(c):
    print(f"Attempting to connect to {IP}")
    result = c.run(f'ssh {USER}@{IP} -C {SERVE}')
    print(f'Server should now be running in a remote screen session.')
    print(result)

