"""Split WAV files into chunks for Sarvam sync REST (30s limit)."""
from __future__ import annotations

import os
import tempfile
import wave
from typing import List, Tuple


def wav_duration_seconds(path: str) -> float:
    with wave.open(path, "rb") as wf:
        rate = wf.getframerate()
        if rate <= 0:
            return 0.0
        return wf.getnframes() / float(rate)


def split_wav(path: str, max_seconds: float = 25.0) -> Tuple[List[str], List[float]]:
    """
    Split a PCM WAV into <= max_seconds chunks.
    Returns (chunk_paths, chunk_start_offsets_seconds).
    """
    with wave.open(path, "rb") as wf:
        channels = wf.getnchannels()
        sample_width = wf.getsampwidth()
        rate = wf.getframerate()
        total_frames = wf.getnframes()
        if rate <= 0 or total_frames <= 0:
            return [], []

        frames_per_chunk = max(1, int(rate * max_seconds))
        chunk_paths: List[str] = []
        offsets: List[float] = []
        start_frame = 0

        while start_frame < total_frames:
            chunk_frames = min(frames_per_chunk, total_frames - start_frame)
            wf.setpos(start_frame)
            frames = wf.readframes(chunk_frames)

            chunk_fd, chunk_path = tempfile.mkstemp(suffix=".wav", dir="/tmp")
            os.close(chunk_fd)
            with wave.open(chunk_path, "wb") as out:
                out.setnchannels(channels)
                out.setsampwidth(sample_width)
                out.setframerate(rate)
                out.writeframes(frames)

            chunk_paths.append(chunk_path)
            offsets.append(start_frame / float(rate))
            start_frame += chunk_frames

        return chunk_paths, offsets


def remove_paths(paths: List[str]) -> None:
    for path in paths:
        try:
            if path and os.path.exists(path):
                os.unlink(path)
        except OSError:
            pass
