def lecture(nom : str) -> str:
    """get all character of a file

    :nom: file name
    :returns: string of the file's content

    """
    with open(nom, 'r') as file:
        return file.read()


def nettoyage(texte : str) -> str:
    """clean the text from it's space and uppsercase

    :texte: Sentence to cclean
    :returns: the string cleaned

    """
    texte = texte.lower()
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    ret = ''
    for char in texte:
        if char in alphabet:
            ret += char
    return ret


def chiffrement_decalage(texte : str, u : int) -> str:
    """Encrypt a string with cesar

    :texte: String to encrypt
    :u: Key for ceasar encryption
    :returns: encrypted text

    """
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    decalage = dict()
    for k, l in enumerate(alphabet):
        decalage[l] = alphabet[(k+u) % len(alphabet)]
    ret = ''
    for l in texte:
        ret += decalage[l]
    return ret


def dechiffrement_decalage(texte, u):
    """decrypt text encoded with cesar

    :texte: the string to decode
    :u: ceasar key to decode
    :returns: the string decoded with the key 

    """
    return chiffrement_decalage(texte, -u)


def chiffrement_substitution(texte, dico):
    ret = ''
    for l in texte:
        if l in dico:
            ret += dico[l]
        else:
            ret += l
    return ret


def dechiffrement_substitution(texte, dico):
    invert = dict()
    for k, v in dico.items():
        invert[v] = k
    return chiffrement_substitution(texte, invert)



def file_to_dict(filename):
    ret = dict()
    with open(filename) as f:
        for l in f:
            ret[l.split()[0]] = l.split()[1]
    return ret



if __name__ == "__main__":
    import sys
    if(len(sys.argv) == 5):
        if sys.argv[1] == 'd':
            if sys.argv[2] == 'c':
                text = nettoyage(lecture(sys.argv[3]))
                print(chiffrement_decalage(text, int(sys.argv[4])))
            if sys.argv[2] == 'd':
                text = nettoyage(lecture(sys.argv[3]))
                print(dechiffrement_decalage(text, sys.argv[4]))

        if sys.argv[1] == 's':
            if sys.argv[2] == 'c':
                text = nettoyage(lecture(sys.argv[3]))
                dico = file_to_dict(sys.argv[4])
                print(chiffrement_substitution(text, dico))
            if sys.argv[2] == 'd':
                text = nettoyage(lecture(sys.argv[3]))
                dico = file_to_dict(sys.argv[4])
                print(dechiffrement_substitution(text, dico))


