#!/bin/python
""" Compression
Usage:
    compression.py (-c|-d) -t <type> --in <input> [--out <output>]
    compression.py -h | --help
    compression.py --version

Options:
    -h --help   Show this screen
    --version   Show Version
    -c          Compress
    -d          Decompress
    -t          Choose Compression Type (currently supported: lz, rle)
    --in        Input file
    --out       Output file
"""

def read_file(filename:str) -> str:
    try:
        with open(filename) as file:
            return file.read()
    except e:
        print(e)


def lz_compression(text:str):
    """compress all duplicate word
    put each word into a list and make make a string of all the occurence

    :text: string to compress
    :returns: tuple with (list of word, decoding string)

    """
    splitted_text = text.split()
    word_list = list()
    key = dict()
    key_value = 0
    for v in splitted_text:
        if v not in key.keys():
            key[v] = key_value 
            key_value += 1
        word_list.append(key[v])
    return word_list, key

def save_lz(filename, word_list, key_list):
    with open(filename, 'w') as file:
        word_list = map(str, word_list)
        file.writelines(' '.join(word_list))
        file.writelines(' '.join(list(key_list.items())))


def lz_decompression(text:str):
    pass


def rle_compression(text:str):
    """compress all duplicate word
    put each word into a list and make make a string of all the occurence

    :text: string to compress
    :returns: tuple with (list of word, decoding string)

    """
    splitted_text = text.split()


def rle_decompression(text:str):
    pass


if __name__ == "__main__":
    from docopt import docopt
    argument = docopt(__doc__, version="V1")
    print(argument)
    if argument['<type>'].lower() == 'lz':
        if argument['-d']:
            result = lz_decompression(read_file(argument['<input>']))
            print(result)
        if argument['-c']:
            w_list, k_list = lz_compression(read_file(argument['<input>']))
            save_lz('test.Ltxt', w_list, k_list)
    elif argument['<type>'].lower() == 'rle':
        if argument['-d']:
            result = rle_decompression(read_file(argument['<input>']))
            print(result)
        if argument['-c']:
            result = rle_compression(read_file(argument['<input>']))
            print(result)
    else:
        raise TypeError("choose a type between lz and rle")
