from __future__ import annotations

import argparse

from gradio.themes import ThemeClass


def main():
    parser = argparse.ArgumentParser(description="Upload a demo to a space")
    parser.add_argument("theme", type=str, help="Theme json file")
    parser.add_argument("repo_name", type=str, help="HF repo name to store the theme")
    parser.add_argument(
        "--org_name",
        type=str,
        help="The name of the org to save the space in. If None (the default), the username corresponding to the logged in user, or hƒ_token is used.",
    )
    parser.add_argument("--version", type=str, help="Semver version")
    parser.add_argument("--token", type=str, help="Hugging Face Token")
    parser.add_argument(
        "--theme-name",
        type=str,
        help="Name of theme.",
    )
    parser.add_argument(
        "--description",
        type=str,
        help="Description of theme",
    )
    args = parser.parse_args()
    upload_theme(
        args.theme,
        args.repo_name,
        args.org_name,
        args.version,
        args.token,
        args.theme_name,
        args.description,
    )


def upload_theme(
    theme: str,
    repo_name: str,
    org_name: str | None = None,
    version: str | None = None,
    token: str | None = None,
    theme_name: str | None = None,
    description: str | None = None,
):
    theme = ThemeClass.load(theme)

    return theme.push_to_hub(
        repo_name=repo_name,
        version=version,
        token=token,
        theme_name=theme_name,
        description=description,
        org_name=org_name,
    )
