#!/usr/bin/python3
from py2pack import generate, file_template_list
import argparse
from pathlib import Path
import sys
from os import getcwd
import glob

parser_generate = argparse.ArgumentParser(description='generate RPM spec or DEB dsc file from a package')
parser_generate.add_argument('--name', help='package name')
parser_generate.add_argument('--version', nargs='?', help='package version (optional)')
parser_generate.add_argument('--source-url', default=None, help='source url')
parser_generate.add_argument('--home-page', default=None, help='home page url')
parser_generate.add_argument('--summary', default=None, help='summary text')
parser_generate.add_argument('--setopt', default=[], action="append", help='An KEY=VALUE option (optional)')
parser_generate.add_argument('--license', default=None, help='license text')
parser_generate.add_argument('--maintainer', default=None, help='maintainer')
parser_generate.add_argument('--description', default=None, help='description text')
parser_generate.add_argument('--source-glob', help='source glob template')
parser_generate.add_argument('--localfile', default='', help='path to the local PKG-INFO or json metadata')
parser_generate.add_argument('-t', '--template', choices=file_template_list(), default='opensuse.spec', help='file template')
parser_generate.add_argument('-f', '--filename', help='spec filename (optional)')
parser_generate.add_argument('--noop', default='disable', choices=['enable', 'disable'], help='do nothing')
parser_generate.add_argument('--outdir', help='output directory', default=getcwd())
args = parser_generate.parse_args(sys.argv[1:])
if args.noop == 'enable':
    exit(0)


def make_absolute(base_path, target_path):
    # Create Path objects
    base = Path(base_path)
    target = Path(target_path)

    # If the target path is already absolute, return it
    if target.is_absolute():
        return target
    else:
        # Make the target path absolute based on the base path
        return (base / target).resolve()

filename = args.filename
outdir = args.outdir

if not filename:
    filename = 'python-'+args.name+Path(args.template).suffix

args.filename = make_absolute(outdir, filename)
options = args.options = {}
options['summary_no_ending_dot'] = args.summary
options['home_page'] = args.home_page
options['license'] = args.license
options['user_name'] = args.maintainer
options['description'] = args.description

for opt in args.setopt:
  if '=' in opt:
    key, value = opt.split('=', 1)
    options[key] = value
  else:
    options[opt] = True

localfile = args.localfile

if localfile:
    localfile = make_absolute(outdir, localfile)
    matching_files = glob.glob(args.localfile)
    if matching_files:
        args.localfile = matching_files[0]


def Munch(args):
    import collections
    d = collections.defaultdict(lambda: None)
    d.update(args)
    return type('Munch', tuple(), {
        "__getattr__": d.__getitem__,
        "__setattr__": d.__setitem__,
        "__getitem__": d.__getitem__,
        "__setitem__": d.__setitem__,
        "__contains__": d.__contains__})()

generate(Munch(args.__dict__))

