#!/usr/bin/python3

import argparse
import os
import sys
import time
from console_log.config import read_config
from console_log.base import RunPager

CONFIG = "/etc/console-log.conf"


def find_config_block_by_file_name(config_list, target_file):
    for entry in config_list:
        file_field = entry.get("file")
        if isinstance(file_field, list):
            if file_field == [target_file]:
                return entry
        elif isinstance(file_field, str):
            if file_field == target_file:
                return entry
    return None


def main():
    parser = argparse.ArgumentParser(
        description="Run pager on a given log file"
    )
    parser.add_argument(
        "--file",
        required=True,
        help="Path to the log file",
    )
    parser.add_argument(
        "--maxfilesize",
        help="Maximum file size",
    )
    parser.add_argument(
        "--pager",
        default="less",
        help="pager to use (currently only less is supported)",
    )
    args = parser.parse_args()

    pager = args.pager or "less"

    if not os.path.isfile(args.file):
        print(f"Error: File '{args.file}' does not exist.", file=sys.stderr)
        time.sleep(3600)
        sys.exit(1)

    logfilesize = os.path.getsize(args.file)
    if args.maxfilesize is not None and logfilesize > int(args.maxfilesize):
        print(
            f"Error: {args.file} size {logfilesize}"
            f"exceeds {args.maxfilesize}, not starting pager!",
            file=sys.stderr,
            flush=True,
        )
        time.sleep(3600)
        sys.exit(1)

    blocks = read_config(CONFIG)

    RunPager(
        args.file,
        find_config_block_by_file_name(blocks, args.file) or {},
        pager,
    )


if __name__ == "__main__":
    main()
