#!/usr/bin/env python3

import argparse
from os import symlink
import os.path
import sys
import toml

parser = argparse.ArgumentParser(description='link workspace crates with path')
parser.add_argument('--input')
parser.add_argument('--destination')
parser.add_argument('--relative')
args = parser.parse_args()

pkg_input = toml.load(args.input)

crates = {}
for member in pkg_input.get('workspace', {}).get('members', []):
    if member == 'examples':
        pass
    else:
        crates[member.replace('/', '-')] = member

for dep, data in pkg_input.get('workspace', {}).get('dependencies', {}).items():
    if not isinstance(data, dict) or 'path' not in data:
        continue
    name = data.get('package', dep)
    path = data['path'].removeprefix('./')
    if '/' not in name:
        crates[name] = path

for name, path in crates.items():
    target = os.path.join(args.destination, name)
    print(f'symlink: {name} -> {path}')
    symlink(os.path.join(args.relative, path), target)
    if not os.path.exists(target):
        print(f'Expected crate "{target}" does not exist!', file=sys.stderr)
        exit(1)
    print(
        '{"files": {}, "package": null}',
        file=open(os.path.join(target, '.cargo-checksum.json'), 'w'),
    )
