import json, pathlib, time, os
from faster_whisper import WhisperModel

root = pathlib.Path(__file__).resolve().parents[1]
job = root / 'production/tkdn-evidence'
(job / 'alignment-status.json').write_text(json.dumps({'status': 'RUNNING'}))

try:
    model = WhisperModel('medium', device='cpu', compute_type='int8', cpu_threads=6, download_root=str(root / '.cache/whisper-models'))
    segments, info = model.transcribe(
        str(job / 'voice-16k.wav'),
        language='id',
        word_timestamps=True,
        beam_size=1,
        vad_filter=False,
        condition_on_previous_text=False,
        temperature=0,
        initial_prompt='Perhitungan TKDN. Supplier komponen. Nilai biaya. Spreadsheet. Evidence. Version trail. Audit.'
    )
    items = []
    for s in segments:
        items.append({
            'start': s.start,
            'end': s.end,
            'text': s.text,
            'words': [{'start': w.start, 'end': w.end, 'word': w.word, 'probability': w.probability} for w in s.words]
        })
        print('Aligned segment up to', round(s.end, 2), 's:', s.text, flush=True)

    (job / 'alignment.json').write_text(
        json.dumps({'language': info.language, 'duration': info.duration, 'segments': items}, ensure_ascii=False, indent=2),
        encoding='utf-8'
    )
    (job / 'alignment-status.json').write_text(json.dumps({'status': 'SUCCESS'}))
    print('ALIGNMENT_SUCCESS. Total duration:', round(info.duration, 2))
except Exception as e:
    (job / 'alignment-status.json').write_text(json.dumps({'status': 'FAILED', 'error': str(e)}))
    raise
