#!/usr/bin/env python3
"""
Son Viraj - local transcription helper.

Usage:
  python3 sv_whisper_transcribe.py /path/to/audio.wav

Outputs JSON to stdout:
  {"segments":[{"start":0.0,"end":4.2,"text":"..."}, ...]}

Requires:
  pip install faster-whisper
"""

import json
import sys
import time


def main() -> int:
    if len(sys.argv) < 2:
        print(json.dumps({"error": "missing_audio_path"}))
        return 2

    audio_path = sys.argv[1]

    try:
        from faster_whisper import WhisperModel  # type: ignore
    except Exception:
        print(json.dumps({"error": "missing_dependency_faster_whisper"}))
        return 3

    # CPU default (server-friendly). If you have CUDA, set compute_type accordingly.
    model_name = "base"
    print(
        "[sv_whisper] loading_model name=%s (CPU; uzun seslerde dakikalar sürebilir)"
        % model_name,
        file=sys.stderr,
        flush=True,
    )
    t0 = time.time()
    model = WhisperModel(model_name, device="cpu", compute_type="int8")

    segments_out = []
    try:
        segments, info = model.transcribe(
            audio_path,
            language="tr",  # Turkish-first; model will still work for mixed
            vad_filter=True,
        )
        dur = getattr(info, "duration", None)
        print(
            "[sv_whisper] transcribe_start duration_sec=%s — stderr satırları ilerlemedir"
            % (round(dur, 1) if dur is not None else "?"),
            file=sys.stderr,
            flush=True,
        )
        last_log = t0
        n = 0
        for seg in segments:
            txt = (seg.text or "").strip()
            if not txt:
                continue
            n += 1
            segments_out.append(
                {"start": float(seg.start), "end": float(seg.end), "text": txt}
            )
            now = time.time()
            if now - last_log >= 30.0:
                print(
                    "[sv_whisper] progress segments=%d last_ts=%.1fs elapsed=%ds"
                    % (n, float(seg.start), int(now - t0)),
                    file=sys.stderr,
                    flush=True,
                )
                last_log = now
        print(
            "[sv_whisper] done segments=%d elapsed_sec=%d"
            % (len(segments_out), int(time.time() - t0)),
            file=sys.stderr,
            flush=True,
        )
    except Exception as e:
        print(json.dumps({"error": "transcribe_failed", "detail": str(e)}))
        return 4

    print(json.dumps({"segments": segments_out}))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

