#!/bin/sh
''''[ ! -z $VIRTUAL_ENV ] && exec python -u -- "$0" ${1+"$@"}; command -v python3 > /dev/null && exec python3 -u -- "$0" ${1+"$@"}; exec python2 -u -- "$0" ${1+"$@"} # '''

import os, sys
import argparse

HERE = os.path.dirname(__file__)
READIES = os.path.abspath(os.path.join(HERE, ".."))
sys.path.insert(0, READIES)
import paella  # noqa: F401

parser = argparse.ArgumentParser(description='Create relative symlink')
parser.add_argument('-t', '--target', help='Path of file or directory the link points to', required=True)
parser.add_argument('-l', '--link', help='Symlink path, defaults to working direcory')
parser.add_argument('-d', '--dir', help='Directory in which link is created')
parser.add_argument('-v', '--verify', action="store_true", default=False, help='Verify target exists')
parser.add_argument('-f', '--force', action="store_true", default=False, help='Overwrite existing link')
parser.add_argument('-n', '--nop', action="store_true", default=False, help='No operation')
args = parser.parse_args()

target = os.path.abspath(args.target)
if args.verify and not os.path.exists(target):
    eprint("Target does not exist: %s" % target)
    exit(1)

if args.link and args.dir:
    eprint("--link and --dir arguments are conflicting.")
    exit(1)

if args.link:
    link = os.path.abspath(args.link)
    link_dir = None
    link_name = os.path.basename(link)
elif not args.dir:
    link = None
    link_dir = os.getcwd()
    link_name = os.path.basename(target)
    link = os.path.join(link_dir, link_name)

if args.dir:
    link = None
    link_dir = os.path.abspath(args.dir)
    link_name = os.path.basename(target)
    link = os.path.join(link_dir, link_name)

if os.path.exists(link) or os.path.islink(link):
    if not os.path.islink(link):
        eprint("File exists: %s\nNot a link - not removing" % link)
        exit(1)
    if args.force:
        if args.nop:
            print("Removing %s" % link)
        else:
            os.remove(link)
    else:
        eprint("Link exists: %s" % link)
        exit(1)

target_dir = os.path.relpath(os.path.dirname(target), os.path.dirname(link))
target_name = os.path.basename(target)
target = os.path.join(target_dir, target_name)

if args.nop:
    print("%s -> %s" % (link, target))
else:
    os.symlink(target, link)
