#!/usr/bin/env python3
"""Check lang files."""
from argparse import ArgumentParser
from traceback import print_exc
from sys import stderr


def parse_txt(lang, no_warning):
    """Parse txt file and check strings to display definition."""
    if lang == "en":
        file_path = "lang_en.txt"
    else:
        file_path = "lang_en_%s.txt" % lang

    lines = 1
    with open(file_path) as src:
        while True:
            comment = src.readline().split(' ')
            src.readline()  # source
            translation = src.readline()[:-1]

            cols = None
            rows = None
            for item in comment[1:]:
                key, val = item.split('=')
                if key == 'c':
                    cols = int(val)
                elif key == 'r':
                    rows = int(val)
                else:
                    raise RuntimeError(
                        "Unknown display definition %s on line %d" %
                        (' '.join(comment), lines))
            if cols is None and rows is None:
                if not no_warning:
                    print("[W]: No display definition on line %d" % lines)
                cols = len(translation)     # propably fullscreen
            if rows is None:
                rows = 1

            if len(translation)-2 > cols*rows:
                stderr.write(
                    "[E]: Text %s is longer then definiton on line %d\n" %
                    (translation, lines))
                stderr.flush()

            if len(src.readline()) != 1:  # empty line
                break
            lines += 4


def main():
    """Main function."""
    parser = ArgumentParser(
        description=__doc__,
        usage="$(prog)s lang")
    parser.add_argument(
        "lang", nargs='?', default="en", type=str,
        help="Check lang file (en|cs|de|es|fr|it|pl)")
    parser.add_argument(
        "--no-warning", action="store_true",
        help="Disable warnings")

    args = parser.parse_args()
    try:
        parse_txt(args.lang, args.no_warning)
        return 0
    except Exception as exc:
        print_exc()
        parser.error("%s" % exc)
        return 1


if __name__ == "__main__":
    exit(main())