"""Optional local faster-whisper adapter. The supplied model path is never downloaded."""

import argparse
from dataclasses import asdict
import importlib.metadata
import json
from pathlib import Path

from media import sha, write


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--audio', type=Path, required=True)
    parser.add_argument('--model', type=Path, required=True)
    parser.add_argument('--out', type=Path, required=True)
    parser.add_argument('--language', default='en')
    arguments = parser.parse_args()
    from faster_whisper import WhisperModel
    model = WhisperModel(str(arguments.model), device='cpu', compute_type='int8', cpu_threads=4, local_files_only=True)
    parameters = {'language': arguments.language, 'beam_size': 5, 'word_timestamps': True,
                  'vad_filter': False, 'condition_on_previous_text': False}
    segments, info = model.transcribe(str(arguments.audio), **parameters)
    result = {'engine': 'faster-whisper', 'engine_version': importlib.metadata.version('faster-whisper'),
              'audio_sha256': sha(arguments.audio), 'parameters': parameters,
              'model_files': {str(path.relative_to(arguments.model)): sha(path) for path in sorted(arguments.model.rglob('*')) if path.is_file()},
              'info': asdict(info), 'segments': [asdict(segment) for segment in segments],
              'warning': 'Machine estimates, not human-certified wording or emphasis.'}
    write(arguments.out, result)
    print(json.dumps({'output': str(arguments.out), 'sha256': sha(arguments.out), 'segments': len(result['segments'])}))


if __name__ == '__main__':
    main()
