from invoke import task

from datetime import datetime as dt
import os

HOME = os.path.expanduser('~')
TODAY = dt.now().strftime('%Y.%m.%d')
DOTFILES=f'{HOME}/dotfiles'


@task
def backup_package_list(c):
    c.run(f'dpkg --get-selections > {HOME}/backup/packages.{TODAY}.dpkg')

@task
def show_disk_space(c):
    print("Do we have at least 5G of free space?")
    c.run('df -h /')

@task
def backup_sources(c):
    c.run(f'cp /etc/apt/sources.list {HOME}/backup/sources.list.{TODAY}.backup')



@task
def backup_etc(c):
    print("Use --prompt-for-sudo")
    c.run(f'sudo tar -czf {HOME}/backup/etc.backup.{TODAY}.tar.gz /etc')
    login = os.getlogin()
    c.run(f'sudo chown {login}:{login} {HOME}/backup/etc.backup.{TODAY}.tar.gz')


@task
def review_backups(c):
    print('Lines in dpkg backup:')
    c.run(f'cat {HOME}/backup/*.dpkg | wc -l')
    print('Files in /etc backup:')
    c.run(f'tar tf {HOME}/backup/etc.backup.*.tar.gz | wc -l')
    print('Ensure sources are backed up:')
    c.run(f'tar tf {HOME}/backup/etc.backup.*.tar.gz | grep etc/apt/sources')
    c.run(f'ls -al --block-size=M {HOME}/backup')

@task
def backup(c):
    backup_package_list(c)
    backup_sources_list(c)
    backup_etc(c)
    review_backup(c)

