#!/usr/bin/env python3

import subprocess
import argparse
import os


def main():
    parser = argparse.ArgumentParser(
        prog="update_dependencies.py",
        formatter_class=argparse.RawTextHelpFormatter,
        description='''
        NAME: update_dependencies.py

        PURPOSE:  Installs python3 script package dependencies

        OUTPUT: List of successful and unsuccessful installs

        NOTES: Install as root
        '''
    )
    parser.add_argument('--pyjwt', help='Install PyJWT which is necessary for GhostRequest', action="store_true")

    args = parser.parse_args()

    print("Installing Script Python3 Dependencies")
    packages = ['pandas', 'plotly', 'numpy', 'cryptography', 'paramiko', 'pyarrow', 'websocket-client',
                'xlsxwriter', 'pyshark', 'influxdb', 'influxdb-client', 'matplotlib', 'pdfkit', 'pip-search',
                'pyserial',
                'pexpect-serial', 'scp', 'dash']
    if args.pyjwt:
        packages.append('pyjwt')
    else:
        print('Not installing PyJWT')
    packages_installed = []
    packages_failed = []
    subprocess.call("pip3 uninstall jwt", shell=True)
    subprocess.call('pip3 install --upgrade pip', shell=True)
    for package in packages:
        if os.name == 'nt':
            command = "pip3 install {} ".format(package)
        else:
            command = "pip3 install {} >/tmp/pip3-stdout 2>/tmp/pip3-stderr".format(package)
        res = subprocess.call(command, shell=True)
        if res == 0:
            print("Package {} install SUCCESS Returned Value: {} ".format(package, res))
            packages_installed.append(package)
        else:
            print("Package {} install FAILED Returned Value: {} ".format(package, res))
            print("To see errors try: pip3 install {}".format(package))
            packages_failed.append(package)

    print("Install Complete")
    print("Packages Installed Success: {}\n".format(packages_installed))
    if not packages_failed:
        return
    print("Packages Failed (Some scripts may not need these packages): {}".format(packages_failed))


if __name__ == "__main__":
    main()
