#!/usr/bin/python3

import apt
import apt.progress.base
import apt_pkg
import shutil
import os

def clean():
    apt_cache = apt.Cache()

    apt_pkg.init()
    cache_dir = apt_pkg.config.find_dir ('Dir::Cache::archives')

    for fn in os.listdir (cache_dir):
        file_path = os.path.join (cache_dir, fn)
        try:
            if os.path.isfile (file_path):
                os.unlink (file_path)
            elif os.path.isdir (file_path):
                shutil.rmtree (file_path)
        except Exception as e:
            print (f'Failed to delete {file_path}. Reason: {e}')

def autoremove():
    apt_cache = apt.Cache()
    for pkg in apt_cache:
       if pkg.is_installed and pkg.is_auto_removable:
           pkg.mark_delete()
    try:
        apt_cache.commit()
    except Exception as e:
        print ('installation failed: {}'.format (str (e)))

def remove (pkgs):
    apt_cache = apt.Cache()
    for p in pkgs:
        if p in apt_cache:
            apt_cache[p].mark_delete()
    try:
        apt_cache.commit()
    except Exception as e:
        print ('removal failed: {}'.format (str (e)))

def update():
    apt_cache = apt.Cache()
    apt_cache.update()

def upgrade():
    apt_cache = apt.Cache()
    apt_cache.upgrade()

def cache_search (pkgs):
    apt_cache = apt.Cache()
    res = {}
    for p in pkgs:
        res[p] = True if p in apt_cache else False
    return res

def install (pkgs, opts={}):
    opts_list = []
    for k in opts: opts_list += ['-o', f'{k}={opts[k]}']
    print ('about to install these packages: "{}"'.format (' '.join (pkgs)))
    import subprocess
    subprocess.run (['apt-get', '--yes', 'install'] + pkgs + opts_list)
