import os
from pathlib import Path
from typing import Annotated

import typer
from dotenv import load_dotenv, set_key, unset_key
from rich.table import Table

from .cli import console

env_app = typer.Typer()


ENV_PATH = Path.cwd() / ".nyahome" / ".env"


@env_app.command(name="list")
def list_all_envs() -> None:
    """
    列出所有以 NYAHOME_ 开头的环境变量。

    这些变量可能配置在 .nyahome 内的 .env 文件中，或者通过其他方式预先设置。
    """
    if not load_dotenv(ENV_PATH):
        console.print(
            "[bright_black]未在 .nyahome 目录下读取到任何环境变量。如果这是有意为之，则请无需担心。[/bright_black]"
        )
    table = Table(title="NyaHome 应用的环境变量")
    table.add_column("Key", style="cyan", no_wrap=True)
    table.add_column("Value", style="white")

    for env in os.environ.items():
        if env[0].startswith("NYAHOME_"):
            table.add_row(env[0], env[1])

    console.print(table)


@env_app.command(name="set")
def set_env(
    key: Annotated[str, typer.Argument(help="不包含 NYAHOME_ 的键名")],
    value: Annotated[str, typer.Argument(help="环境变量值")],
) -> None:
    """
    设置 NYAHOME_ 环境变量。请参考 NyaHome 文档以了解使用方法。

    保存在 .nyahome 内的 .env 文件。
    """
    set_key(ENV_PATH, f"NYAHOME_{key.upper()}", value)
    console.print(f"[cyan]已设置环境变量 NYAHOME_{key}。[/cyan]")


@env_app.command(name="unset")
def unset_env(key: Annotated[str, typer.Argument(help="不包含 NYAHOME_ 的键名")]) -> None:
    """
    删除 NYAHOME_ 环境变量。

    操作在 .nyahome 内的 .env 文件。
    """
    unset_key(ENV_PATH, f"NYAHOME_{key.upper()}")
    console.print(f"[cyan]已删除环境变量 NYAHOME_{key}。[/cyan]")
