"""Dia-1.6B multi-speaker TTS podcast starter — lokální, offline, ~8 GB VRAM GPU minimum."""

from __future__ import annotations

import hashlib
import os
import sys
from pathlib import Path

import torch

HF_TOKEN = os.environ.get("HF_TOKEN")  # výhradně z env
MODEL_ID = "narisai/dia-1.6B"  # Apache 2.0
REVISION = "<revision_sha>"  # pinovat na konkrétní commit SHA
MODEL_FILE = "model.safetensors"
EXPECTED_SHA256 = "<sha256_digest>"
MODELS_DIR = Path(os.environ.get("DEV_ENV_MODELS_DIR", "models"))


def _verify_sha256(filepath: Path, expected: str) -> str:
    sha = hashlib.sha256()
    with open(filepath, "rb") as f:
        for chunk in iter(lambda: f.read(1024 * 1024), b""):
            sha.update(chunk)
    digest = sha.hexdigest()
    if digest != expected:
        print(f"CHYBA: SHA256 neshoda pro {filepath.name}", file=sys.stderr)
        sys.exit(1)
    return digest


def _download_weight(repo_id: str, filename: str, revision: str, expected_hash: str) -> Path:
    from huggingface_hub import hf_hub_download

    MODELS_DIR.mkdir(parents=True, exist_ok=True)
    downloaded = hf_hub_download(
        repo_id=repo_id,
        filename=filename,
        revision=revision,
        token=HF_TOKEN,
        local_dir=str(MODELS_DIR),
        local_dir_use_symlinks=False,
        trust_remote_code=False,
    )
    _verify_sha256(Path(downloaded), expected_hash)
    return Path(downloaded)


def generate_podcast(text: str, output_path: str = "podcast.wav") -> None:
    if not torch.cuda.is_available():
        print("CHYBA: Dia-1.6B vyžaduje GPU s minimálně ~8 GB VRAM.", file=sys.stderr)
        sys.exit(1)

    weight_path = _download_weight(MODEL_ID, MODEL_FILE, REVISION, EXPECTED_SHA256)
    state_dict = torch.load(weight_path, map_location="cpu", weights_only=True)

    print(f"Model Dia-1.6B načten (weights_only=True), váhy: {weight_path}")
    print(f"Generuji podcast: {text[:80]}...")
    # Placeholder pro Dia inferenci — doplnit podle skutečného API


if __name__ == "__main__":
    generate_podcast("Dobrý den, vítejte v našem podcastu.")
