"""
Banner display for Hindsight API startup.

Shows the logo and tagline with gradient colors.
"""

from .utils import mask_network_location

# Gradient colors: #0074d9 -> #009296
GRADIENT_START = (0, 116, 217)  # #0074d9
GRADIENT_END = (0, 146, 150)  # #009296

# Pre-generated logo (generated by test-logo.py)
LOGO = """\
  \033[38;2;9;127;184m\u2584\033[0m\033[48;2;8;130;178m\033[38;2;5;133;186m\u2584\033[0m       \033[48;2;10;143;160m\033[38;2;10;143;165m\u2584\033[0m\033[38;2;7;140;156m\u2584\033[0m
 \033[38;2;8;125;192m\u2584\033[0m \033[38;2;3;132;191m\u2580\033[0m\033[38;2;2;133;192m\u2584\033[0m \033[38;2;3;132;180m\u2584\033[0m\033[38;2;1;137;184m\u2584\033[0m\033[38;2;3;133;174m\u2584\033[0m \033[38;2;3;142;176m\u2584\033[0m\033[38;2;4;142;169m\u2580\033[0m \033[38;2;10;144;164m\u2584\033[0m
\033[38;2;6;121;195m\u2580\033[0m\033[38;2;5;128;203m\u2580\033[0m\033[48;2;5;124;195m\033[38;2;3;125;200m\u2584\033[0m\033[38;2;2;126;196m\u2584\033[0m\033[48;2;3;128;188m\033[38;2;1;131;196m\u2584\033[0m\033[48;2;0;152;219m\033[38;2;2;131;191m\u2584\033[0m\033[38;2;1;141;196m\u2580\033[0m\033[38;2;1;135;183m\u2580\033[0m\033[38;2;1;148;198m\u2580\033[0m\033[48;2;1;156;202m\033[38;2;2;135;180m\u2584\033[0m\033[48;2;4;134;169m\033[38;2;1;137;177m\u2584\033[0m\033[38;2;3;138;173m\u2584\033[0m\033[48;2;6;137;165m\033[38;2;2;140;170m\u2584\033[0m\033[38;2;7;144;169m\u2580\033[0m\033[38;2;7;139;158m\u2580\033[0m
   \033[48;2;2;128;202m\033[38;2;2;124;201m\u2584\033[0m\033[48;2;1;130;201m\033[38;2;0;135;212m\u2584\033[0m\033[38;2;2;128;196m\u2584\033[0m \033[48;2;2;142;204m\033[38;2;7;138;199m\u2584\033[0m \033[38;2;1;135;186m\u2584\033[0m\033[48;2;1;142;186m\033[38;2;2;144;194m\u2584\033[0m\033[48;2;3;138;176m\033[38;2;2;134;176m\u2584\033[0m
 \033[48;2;8;118;200m\033[38;2;8;121;209m\u2584\033[0m\033[38;2;3;121;203m\u2580\033[0m \033[38;2;3;122;192m\u2580\033[0m\033[38;2;1;138;216m\u2580\033[0m\033[48;2;0;138;210m\033[38;2;3;128;198m\u2584\033[0m\033[48;2;0;126;188m\033[38;2;2;131;198m\u2584\033[0m\033[48;2;0;142;205m\033[38;2;3;132;193m\u2584\033[0m\033[38;2;1;140;196m\u2580\033[0m  \033[38;2;4;134;175m\u2580\033[0m\033[48;2;13;135;167m\033[38;2;8;136;174m\u2584\033[0m """


def _interpolate_color(start: tuple, end: tuple, t: float) -> tuple:
    """Interpolate between two RGB colors."""
    return (
        int(start[0] + (end[0] - start[0]) * t),
        int(start[1] + (end[1] - start[1]) * t),
        int(start[2] + (end[2] - start[2]) * t),
    )


def gradient_text(text: str, start: tuple = GRADIENT_START, end: tuple = GRADIENT_END) -> str:
    """Render text with a gradient color effect."""
    result = []
    length = len(text)
    for i, char in enumerate(text):
        if char == " ":
            result.append(" ")
        else:
            t = i / max(length - 1, 1)
            r, g, b = _interpolate_color(start, end, t)
            result.append(f"\033[38;2;{r};{g};{b}m{char}")
    result.append("\033[0m")
    return "".join(result)


def print_banner():
    """Print the Hindsight startup banner."""
    print(LOGO)
    tagline = gradient_text("Hindsight: Agent Memory That Works Like Human Memory")
    print(f"\n  {tagline}\n")


def color(text: str, t: float = 0.0) -> str:
    """Color text using gradient position (0.0 = start, 1.0 = end)."""
    r, g, b = _interpolate_color(GRADIENT_START, GRADIENT_END, t)
    return f"\033[38;2;{r};{g};{b}m{text}\033[0m"


def color_start(text: str) -> str:
    """Color text with gradient start color (#0074d9)."""
    return color(text, 0.0)


def color_end(text: str) -> str:
    """Color text with gradient end color (#009296)."""
    return color(text, 1.0)


def color_mid(text: str) -> str:
    """Color text with gradient middle color."""
    return color(text, 0.5)


def dim(text: str) -> str:
    """Dim/gray text."""
    return f"\033[38;2;128;128;128m{text}\033[0m"


def print_startup_info(
    host: str,
    port: int,
    database_url: str,
    llm_provider: str,
    llm_model: str,
    embeddings_provider: str,
    reranker_provider: str,
    mcp_enabled: bool = False,
    version: str | None = None,
    vector_extension: str | None = None,
    text_search_extension: str | None = None,
):
    """Print styled startup information."""
    print(color_start("Starting Hindsight API..."))
    if version:
        print(f"  {dim('Version:')} {color(f'v{version}', 0.1)}")
    print(f"  {dim('URL:')} {color(f'http://{host}:{port}', 0.2)}")
    print(f"  {dim('Database:')} {color(mask_network_location(database_url), 0.4)}")
    print(f"  {dim('LLM:')} {color(f'{llm_provider} / {llm_model}', 0.6)}")
    print(f"  {dim('Embeddings:')} {color(embeddings_provider, 0.8)}")
    print(f"  {dim('Reranker:')} {color(reranker_provider, 1.0)}")
    extensions = f"{vector_extension or 'default'} (vector) / {text_search_extension or 'default'} (text)"
    print(f"  {dim('Extensions:')} {color(extensions, 0.4)}")
    if mcp_enabled:
        print(f"  {dim('MCP:')} {color_end('enabled at /mcp')}")
    print()
