from core.interpreter import interpreter
from core.banner import Banner
from sys import argv
from utilities.color import *
from utilities.files import *
from argparse import ArgumentParser, SUPPRESS
from subprocess import check_call, CalledProcessError, call
import os
import shutil
sample = """from core.module_obtainer import obtainer
info = {
        'author'            :'Creator name',
        'date'              :'Create date',
        'rank'              :'Rank of the module',
        'path'              :'Module create path',
        'category'          :'Main category of the module',
        'license'           :'Module license',
        'description'       :'Module description',
        'references'        :['References for further reading']
}
options = {
            'options_name'        :['require', 'description','value']
}
required = {
        'start_required'     :'False/True', # using default starter
        'check_required'     :'False/True' # module support on not support check option
}
def exploit(): # main exploit function
    pass # stuff to do
def check(): # check function if the module require it
    pass # stuff to do"""

def install():
    try:
        os.mkdir('/etc/pysploit-framework')
        os.mkdir('/etc/pysploit-framework/docs')
    except FileExistsError:
        print(red('\n[!]') + green(" /etc/pysploit-framework") + " folder is exist, try --unistall command before reinstall\n")
        exit()
    except PermissionError:
        print(red("\n[!]") + green(" You") + " should run command as root\n")
        exit()
    try:
        copy(['PySploit.py','core/','files','modules/','samples/','utilities/'], '/etc/pysploit-framework')
        copy(['README.md','LICENSE','pysploit'],'/etc/pysploit-framework/docs')
    except FileExistsError:
       print(red("\n[!]") + green(' Check') + " if all tool files exist and try again\n")
       exit()
    except PermissionError:
        print(red("\n[!]") + green(" You") + " should run command as root\n")
        exit()
    try:
        file = open('/bin/pysploit','w')
        file.write('cd /etc/pysploit-framework &> /dev/null')
        file.write('\npython3 PySploit.py $1 $2 $3 $4')
        call('chmod 777 /bin/pysploit', shell=True)
    except PermissionError:
        print(red("\n[!]") + green(" You") + " should run command as root\n")
        exit()
    else:
        print(blue('\n[CO]') + green(" Tool") + ' installed successfully type pysploit to run it\n')
def uninstall():
    try:
        rm('/etc/pysploit-framework/')
        rm('/bin/pysploit')
    except PermissionError:
        print(red("\n[!]") + green(" You") + " should run command as root\n")
        exit()
    except FileNotFoundError:
        print(red('\n[!]') + green(" Tool") + " does not installed on your device\n")
        exit()
    else:
        print(blue('\n[CO]') + green(" Tool") + ' uninstalled successfully\n')

def main():
    parser = ArgumentParser(prog='PySploit',usage='python3 PySploit.py [options]',  add_help=False)
    help_arguments = parser.add_argument_group('help arguments')
    help_arguments.add_argument('-v', '--version', action='version', version="version 1.2")
    help_arguments.add_argument('-h', '--help', action='help', default=SUPPRESS, help='show this help message and exit.')
    optional_arguments = parser.add_argument_group('optional arguments')
    optional_arguments.add_argument('-c', '--create', dest='filename', required=False, help='create module sample')
    optional_arguments.add_argument('-u', '--upgrade', required=False, action='store_true',  help='create module sample')
    optional_arguments.add_argument('-m', '--manual', required=False, action='store_true',  help='show tool man page')
    optional_arguments.add_argument('-i', '--install', required=False, action='store_true',  help='install tool on your computer')
    optional_arguments.add_argument('-un', '--uninstall', required=False, action='store_true',  help='uninstall tool from your computer')
    args = parser.parse_args()
    if len(argv) > 1:
        if args.filename is not None:
            filename = open(args.filename, 'w')
            filename.write(sample)
        elif args.upgrade == True:
            interpreter().check_upgrade()
        elif args.manual == True:
            try:
                check_call('man /etc/pysploit-framework/docs/pysploit',shell=True)
            except CalledProcessError:
                print(red('\n[!]') + green(' Tool') + " manual is not installed yet\n")
        elif args.install == True:
            install()
        elif args.uninstall == True:
            uninstall()
    else:
        Banner()
        while True:
            interpreter().start_interpreter()

if __name__ == '__main__':
    main()