#!/usr/bin/env python3

import sys

def byterize(obj):
    objdict = obj.__dict__['fields']

    def do_encode(dictio, key):
        if isinstance(dictio[key], str) and len(dictio[key]) > 0 and key not in ['SecondaryAddr']:
            dictio[key] = dictio[key].encode('latin-1')
        elif hasattr(dictio[key], '__dict__'):
            subdictio = dictio[key].__dict__['fields']
            for subkey in subdictio:
                do_encode(subdictio, subkey)
            
    for field in objdict:
        do_encode(objdict, field)
      
    return obj


def justify(astring, indent = 35, break_every = 100):
    str_indent = ('\n' + ' ' * indent)
    splitted = astring.split('\n')
    longests = [(n, s) for n, s in enumerate(splitted) if len(s) >= break_every]

    for longest in longests:
        lines = []
        for i in range(0, len(longest[1]), break_every):
            lines.append(longest[1][i : i + break_every])
        splitted[longest[0]] = str_indent.join(lines)
        
    if len(splitted) > 1:
        justy = str_indent.join(splitted)
    else:
        justy = str_indent + str_indent.join(splitted)
   
    return justy


class ShellStyle(object):
    def style(self, s, style):
        return style + s + '\033[0m'

    def green(self, s):
        return self.style(s, '\033[92m')

    def blue(self, s):
        return self.style(s, '\033[94m')

    def yellow(self, s):
        return self.style(s, '\033[93m')

    def red(self, s):
        return self.style(s, '\033[91m')

    def magenta(self, s):
        return self.style(s, '\033[95m')
    
    def cyan(self, s):
        return self.style(s, '\033[96m')

    def white(self, s):
        return self.style(s, '\033[97m')

    def bold(self, s):
        return self.style(s, '\033[1m')

    def underline(self, s):
        return self.style(s, '\033[4m')




def shell_message(nshell):
     
    shelldict = {0: ShellStyle().yellow("Client generating RPC Bind Request..."),
                 1: ShellStyle().yellow("Client sending RPC Bind Request...") + ShellStyle().red("\t\t\t\t===============>"),
                 2: ShellStyle().red("===============>\t\t") + ShellStyle().yellow("Server received RPC Bind Request !!!"),
                 3: ShellStyle().yellow("\t\t\t\tServer parsing RPC Bind Request..."),
                 4: ShellStyle().yellow("\t\t\t\tServer generating RPC Bind Response..."),
                 5: ShellStyle().red("<===============\t\t") + ShellStyle().yellow("Server sending RPC Bind Response..."),
                 6: ShellStyle().green("\t\t\t\tRPC Bind acknowledged !!!\n"),
                 7: ShellStyle().yellow("Client received RPC Bind Response !!!") + ShellStyle().red("\t\t\t\t<==============="),
                 8: ShellStyle().green("RPC Bind acknowledged !!!\n"),
                 9: ShellStyle().blue("Client generating Activation Request dictionary..."),
                 10: ShellStyle().blue("Client generating Activation Request data..."),
                 11: ShellStyle().blue("Client generating RPC Activation Request..."),
                 12: ShellStyle().blue("Client sending RPC Activation Request...") + ShellStyle().red("\t\t\t===============>"),
                 13: ShellStyle().red("===============>\t\t") + ShellStyle().blue("Server received RPC Activation Request !!!"),
                 14: ShellStyle().blue("\t\t\t\tServer parsing RPC Activation Request..."),
                 15: ShellStyle().blue("\t\t\t\tServer processing KMS Activation Request..."),
                 16: ShellStyle().blue("\t\t\t\tServer processing KMS Activation Response..."),
                 17: ShellStyle().blue("\t\t\t\tServer generating RPC Activation Response..."),
                 18: ShellStyle().red("<===============\t\t") + ShellStyle().blue("Server sending RPC Activation Response..."),
                 19: ShellStyle().green("\t\t\t\tServer responded, now in Stand by...\n"),
                 20: ShellStyle().blue("Client received Response !!!") + ShellStyle().red("\t\t\t\t\t<==============="),
                 21: ShellStyle().green("Activation Done !!!"),
                 -1: ShellStyle().red("\t\t\t\t\t\t\t\tServer receiving"),
                 -2: ShellStyle().red("Client sending"),
                 -3: ShellStyle().red("Client receiving"),
                 -4: ShellStyle().red("\t\t\t\t\t\t\t\tServer sending")
                 }
    
    if isinstance(nshell, list):
        for n in nshell:
            print(shelldict[n])
    else:
        print(shelldict[nshell])