"""
Module related to the argument parsing
"""
import importlib.resources
import stat
import sys
from argparse import ArgumentParser, SUPPRESS, Namespace
from pathlib import Path
from shutil import copy2
from typing import Tuple

try:
    from poezio.version import __version__
except ImportError:
    # No version file, running from git without local install?
    __version__ = "dev"
from poezio import xdg


def parse_args(CONFIG_PATH: Path) -> Namespace:
    """
    Parse the arguments from the command line
    """
    parser = ArgumentParser('poezio')
    parser.add_argument(
        "-c",
        "--check-config",
        dest="check_config",
        action='store_true',
        help='Check the config file')
    parser.add_argument(
        "-d",
        "--debug",
        dest="debug",
        help="The file where debug will be written",
        metavar="DEBUG_FILE")
    parser.add_argument(
        "-f",
        "--file",
        dest="filename",
        default=CONFIG_PATH / 'poezio.cfg',
        type=Path,
        help="The config file you want to use",
        metavar="CONFIG_FILE")
    parser.add_argument(
        '-v',
        '--version',
        action='version',
        version='Poezio v%s' % __version__,
    )
    parser.add_argument(
        "--custom-version",
        dest="custom_version",
        help=SUPPRESS,
        metavar="VERSION",
        default=__version__
    )
    return parser.parse_args()


def run_cmdline_args() -> Tuple[Namespace, bool]:
    "Parse the command line arguments"
    options = parse_args(xdg.CONFIG_HOME)
    firstrun = False

    # Copy a default file if none exists
    if not options.filename.is_file():
        try:
            options.filename.parent.mkdir(parents=True, exist_ok=True)
        except OSError as e:
            sys.stderr.write(
                'Poezio was unable to create the config directory: %s\n' % e)
            sys.exit(1)
        default = Path(__file__).parent / '..' / 'data' / 'default_config.cfg'
        try:
            other = importlib.resources.files('poezio') / 'default_config.cfg'
        except Exception:
            print(
                'Unable to locate the default poezio config file for initial setup.',
                file=sys.stderr,
            )
            other = Path()
        if default.is_file():
            copy2(str(default), str(options.filename))
        elif other.is_file():
            copy2(str(other), str(options.filename))
        else:
            print(
                'The poezio default config file does not seem to exist, there '
                'may be an issue in packaging.',
                file=sys.stderr,
            )

        # Inside the nixstore and possibly other distributions, the reference
        # file is readonly, so is the copy.
        # Make it writable by the user who just created it.
        if options.filename.exists():
            options.filename.chmod(options.filename.stat().st_mode
                                   | stat.S_IWUSR)
        firstrun = True

    return (options, firstrun)
