#!/usr/bin/env python3
import toml
import click


def format_version(dep, version):
    if version == "*":
        return dep
    # If it's a dictionary, assume it's in the format {extras = ["socks"], version = "*"}
    elif isinstance(version, dict) and "version" in version:
        version = version["version"]
        if version == "*":
            return dep
        elif version.startswith("^"):
            return f"{dep}>={version[1:]}.0"
        elif version.startswith((">=", "<=", "!=", "==", "<", ">")):
            return f"{dep}{version}"
        else:
            return f"{dep}=={version}"
    elif version.startswith("^"):
        return f"{dep}>={version[1:]}.0"
    elif version.startswith((">=", "<=", "!=", "==", "<", ">")):
        return f"{dep}{version}"
    else:
        return f"{dep}=={version}"


@click.command()
@click.argument("pyproject_filename")
def poetry_to_requirements(pyproject_filename):
    """Convert poetry dependencies in a pyproject.toml to requirements format."""
    with open(pyproject_filename, "r") as f:
        data = toml.load(f)

    dependencies = data.get("tool", {}).get("poetry", {}).get("dependencies", {})

    requirements = []

    for dep, version in dependencies.items():
        if dep == "python" or dep == "onionshare_cli":
            continue

        formatted = format_version(dep, version)
        if formatted:
            requirements.append(formatted)

    for req in requirements:
        print(req)


if __name__ == "__main__":
    poetry_to_requirements()