from random import choice

ART = [
    """
                         ♡♡                                            
                        ♡♡♡                                            
                      ♡♡ ♡♡♡♡                                          
                 ♡♡♡♡♡♡♡♡♡♡♡♡                                          
                         ♡♡♡♡♡                                         
                          ♡♡♡♡♡                                        
                       ♡♡♡♡♡♡♡♡♡                                       
                      ♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡        ♡♡♡♡♡♡                    
                      ♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡ ♡♡♡♡                
                      ♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡              
                  ♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡     ♡♡♡♡♡♡♡♡♡♡             
        ♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡       ♡♡♡♡♡     ♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡         
                                                            ♡♡♡        
                                                             ♡♡♡♡      
                                                             ♡♡♡♡♡     
                                                              ♡♡♡♡♡    
                                                               ♡♡♡♡    
                                                                ♡♡     
    """,
    """
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⡇⠀⢠⣾⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⡇⢠⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡇⢸⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⡀⠙⠛⠃⠘⠻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠐⠚⣛⣛⣁⡀⠹⣿⣿⣶⣶⣤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⣠⣴⠶⠿⠛⠛⠛⠛⠛⠀⢻⣿⣿⣤⣀⣙⣷⣀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⣈⣁⣤⣴⣶⠶⠿⠿⠿⠿⠇⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣦⣤⡄⠀
    ⠀⠀⠐⠛⢉⣉⣠⣤⣤⣶⣶⣶⣶⣦⠀⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⠿⠛⠉⠀⠀
    ⠀⠀⡾⠛⠉⠉⠉⠙⠻⢿⣿⣿⣿⣿⡀⢹⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⡇⠘⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⢸⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⡇⠀⣾⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠃⠀⢿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⠀⠀⠸⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠀⠀⠀⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    
    
    """,
    """
        ⠀⠀ ⠀⠀⠀⠀⠀⢰⣿⡄⢸⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⡄⢸⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣷⢸⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⠧⠀⠀⠀⠀⠀⠀
    ⢀⣤⣤⣤⣤⣤⣤⣤⣿⣿⣯⣉⣉⣽⣿⡿⠁⢀⣤⡀⠀⠀⠀⠀⠀⠀
    ⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠸⠿⠟⠀⢰⡄⠀⠀⠀
    ⠀⠀⠉⠙⠛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⣄⣀⣀⣴⣿⣿⡄⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⣿⣿⣿⣿⠏⠀⣰⣿⣿⣿⣿⣿⣿⣿⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⠟⠁⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠀⠀
    """
]

POWER = [
    'love Σ>―(〃°ω°〃)♡→ and hate too',
    'love Σ>―(〃°ω°〃)♡→',
    'some really cool stuff',
    'thousands of monkeys on thousands of typewriters',
    'thousands of monkeys sharing a single typewriter',
    'sun-charged crystals',
    'the dark arts',
    'water wheels & solar panels',
    'ancient alien technology',
    'gnomes',
    'captain planet',
    'power',
    'positivity',
    'siphoning a tiny bit of life force from everyone working here',
    'spaghetti code',
    'the heat generated by flexing all my muscles at the same time',
    'revenge and anger',
    'the Dayman',
    'the Nightman',
    'Tom Bombadil',
    'the desire to find the one ring',
    'Eru Ilúvatar',
    'Morgoth',
    'Sauron',
    'Mithrandir',
    'Olórin',
    'Arwen',
    "the radiance of Galadriel's hair",
    'tRiCkLe DoWn EcOnOmIcS',
    'tHe InFiNiTe GrOwTh MoDeL',
    'moon particles',
    'latin jazz',
    'fear',
    'apes together strong',
    'creepy crawlies',
    'trash compactors',
    'monkey men'
]


def print_console_output(output_type: str, **kwargs):
    quiet = kwargs.get('quiet')
    output = kwargs.get('output')
    log_file = kwargs.get('log_file')
    features = kwargs.get('features')
    tags = kwargs.get('tags')
    user_defs = kwargs.get('D')
    test_split = kwargs.get('test_split')
    statement_data = []
    dry_run = kwargs.get('dry_run')

    if test_split is not None:
        test_print = [f'process {i}: {[t.location.filename for t in tests]}' for i, tests in test_split.items()]
        statement_data = test_print

    if quiet is True: return

    console_output = {
        'startup_statement': (
            '',
            choice(ART) + '\nAnubis | powered by ' + choice(POWER)
        ),
        'output_statement': (
            '\n\t',
            ['\nSetting Up Output', f'output: <{output}>', f'logs: <{log_file}>']
        ),
        'parameter_statement': (
            '\n\t',
            ['\nTest Parameters',
             'locations: ' + ", ".join(test for test in features),
             f'tags: {", ".join(["" + tag for group in tags for tag in group]) if tags else "n/a"}',
             'user definitions: ' + ", ".join(f"{k}={v}" for k, v in vars(user_defs).items())]
        ),
        'running_statement': (
            '\n\t',
            ['\nRunning Tests'] + statement_data,
        ),
        'dry_run_statement': (
            '\n\t',
            ['\nDry Run'] + statement_data
        ),
        'end_statement': (
            '',
            ['\n𓃥 ' + "dry run" if dry_run else "no tests found", ' --> this run passes by default 𓃥']
        )
    }

    join, statement = console_output[output_type]
    print(join.join(statement))
