"""Live master — pedalboard twin only. LANDR VST is not loaded here (kills CoreAudio)."""
from __future__ import annotations

import subprocess
import threading

import numpy as np
from pedalboard import Compressor, Gain, HighpassFilter, Limiter, Pedalboard


class Master:
    def __init__(self, *, load_now: bool = False) -> None:
        self.bypass = False
        self.label = "Twin master"
        self._lock = threading.Lock()
        self._twin = Pedalboard([
            HighpassFilter(35.0),
            Compressor(threshold_db=-12.0, ratio=2.0, attack_ms=8.0, release_ms=100.0),
            Gain(gain_db=0.0),
            Limiter(threshold_db=-1.0, release_ms=80.0),
        ])

    @property
    def has_pro(self) -> bool:
        return False

    def load_pro(self) -> None:
        return

    def process(self, block: np.ndarray, sr: float) -> np.ndarray:
        if self.bypass:
            return np.clip(np.nan_to_num(block, copy=False), -1.0, 1.0)
        with self._lock:
            x = np.ascontiguousarray(block.T, dtype=np.float32)
            y = self._twin(x, float(sr))
        if y.ndim == 1:
            y = np.stack([y, y])
        return np.clip(np.nan_to_num(y.T, copy=False), -1.0, 1.0)

    def open_pro_ui(self) -> None:
        return

    @staticmethod
    def notify(title: str, body: str) -> None:
        t = title.replace('"', "")[:60]
        b = body.replace('"', "")[:160]
        subprocess.run(
            ["/usr/bin/osascript", "-e", f'display notification "{b}" with title "{t}"'],
            check=False,
            capture_output=True,
        )
