#! /usr/bin/env python3
"""Show some lines from files"""

import sys

from pysyte import __version__
from pysyte import text_streams
from pysyte.cli.main import run
from pysyte.types import lines


def parse_args(parser):
    """Parse out command line arguments"""
    p = parser
    p.positionals('files', help='files to edit')
    p.string('-a', '--at', default="", help='Show line at the line number')
    p.boolean('-p', '--paste', help='Paste text from clipboard')
    p.boolean('-i', '--stdin', help='Wait for text from stdin')
    p.string('-f', '--first', default="1",
               help='number/regexp of first line to show')
    p.string('-l', '--last', default="0",
               help='number/regexp of last line to show')
    p.boolean('-n', '--numbers', help='Show line numbers')
    p.int('-w', '--width', help='Max width of shown line')
    p.boolean('-v', '--version', help='Show version')


def post_parse(args):
    if args.version:
        print(f'{sys.argv[0]} version: {__version__}')
        sys.exit(0)
    return args


def main(args):
    """Run the script"""
    for stream in text_streams.args(args, 'files'):
        lines_in, first = lines.first_and_rest(
            stream, args.at, args.first, args.last)
        lines_out = lines.reformat_lines(
            lines_in, first, args.numbers, args.width)
        print(lines_out)
    return True


run(main, parse_args, post_parse)
