#!/usr/bin/python3

"""
Convert stdin to rot13.

It's really a Caesar Cipher.
rot13 is interesting mostly because it is its own inverse.
"""

import sys


def flip(offset, char, base):
    """Flip one character if in the correct range."""
    ord_char = ord(char)
    ord_base = ord(base)
    diff = ord_char - ord_base
    diff = (diff + offset) % 26
    return chr(diff + ord_base)


def convert(string, offset=13):
    """Convert a string to rot13."""
    list_ = list()
    for char in string:
        if char >= 'a' and char <= 'z':
            result_char = flip(offset, char, 'a')
        elif char >= 'A' and char <= 'Z':
            result_char = flip(offset, char, 'A')
        else:
            result_char = char
        list_.append(result_char)
    return ''.join(list_)


def usage(retval):
    """Output a usage message."""
    if retval == 0:
        write = sys.stdout.write
    else:
        write = sys.stderr.write
    write('Usage: {0} ----offset 13\n'.format(sys.argv[0]))
    sys.exit(retval)


def main():
    """Do a caesar cipher, defaulting to rot13."""
    offset = 13
    while sys.argv[1:]:
        if sys.argv[1] == '--offset':
            offset = int(sys.argv[2])
            del sys.argv[1]
        elif sys.argv[1] in set(['-h', '--help']):
            usage(0)
        else:
            sys.stderr.write('{0}: Unrecognized option: {1}\n'.format(sys.argv[0], sys.argv[1]))
            usage(1)
        del sys.argv[1]
    for line in sys.stdin:
        sys.stdout.write(convert(line, offset))


if __name__ == '__main__':
    main()
