import json
import sys
from typing import List

from pydantic import BaseModel


class AlfredOutput(BaseModel):
    title: str
    subtitle: str
    valid: bool
    arg: str | None = None
    variables: dict = {}


def print_debug(message: str):
    print(message, file=sys.stderr)


def print_out(
    title: str, subtitle: str, valid: bool, arg: str | None = None, **kwargs
) -> None:
    print(
        json.dumps(
            {
                "items": [
                    {
                        "title": title,
                        "subtitle": subtitle,
                        "valid": valid,
                        "arg": arg,
                        "variables": kwargs,
                    }
                ]
            }
        )
    )


def print_items(items: List[AlfredOutput]) -> None:
    """Print a list of items in Alfred's JSON format."""
    output_items = [item.model_dump(exclude_none=True) for item in items]
    print(json.dumps({"items": output_items}))
