"""Visualization module for Oscura.

Provides simple matplotlib-based plotting functions for waveforms, spectra,
and digital signals. All functions accept and return matplotlib axes for
composability.

**Requires matplotlib:**
Install with: pip install oscura[visualization]

Example:
    >>> import matplotlib.pyplot as plt
    >>> import oscura as osc
    >>> from oscura.visualization import plot_waveform, plot_fft
    >>>
    >>> trace = osc.load("signal.wfm")
    >>> fig, (ax1, ax2) = plt.subplots(2, 1)
    >>> plot_waveform(ax1, trace)
    >>> plot_fft(ax2, trace)
    >>> plt.savefig("analysis.png")
"""

# Import core plotting functions
# Import batch utilities
from oscura.visualization import batch
from oscura.visualization.batch import fig_to_base64, generate_all_plots
from oscura.visualization.plot import (
    plot_bathtub,
    plot_eye,
    plot_fft,
    plot_histogram,
    plot_logic_analyzer,
    plot_multi_channel,
    plot_protocol_decode,
    plot_psd,
    plot_quality_summary,
    plot_spectrogram,
    plot_spectrum,
    plot_state_machine,
    plot_thd_bars,
    plot_timing,
    plot_waveform,
    plot_xy,
)

# Import styling utilities
from oscura.visualization.styles import (
    COLORBLIND_PALETTE,
    FAIL_SYMBOL,
    IEEE_STYLE,
    LINE_STYLES,
    PASS_SYMBOL,
    apply_ieee_style,
    apply_presentation_style,
    format_pass_fail,
    get_colorblind_cmap,
    get_colorblind_palette,
    get_line_styles,
    get_multi_line_styles,
)

__all__ = [
    "COLORBLIND_PALETTE",
    "FAIL_SYMBOL",
    "IEEE_STYLE",
    "LINE_STYLES",
    "PASS_SYMBOL",
    "apply_ieee_style",
    "apply_presentation_style",
    "batch",
    "fig_to_base64",
    "format_pass_fail",
    "generate_all_plots",
    "get_colorblind_cmap",
    "get_colorblind_palette",
    "get_line_styles",
    "get_multi_line_styles",
    "plot_bathtub",
    "plot_eye",
    "plot_fft",
    "plot_histogram",
    "plot_logic_analyzer",
    "plot_multi_channel",
    "plot_protocol_decode",
    "plot_psd",
    "plot_quality_summary",
    "plot_spectrogram",
    "plot_spectrum",
    "plot_state_machine",
    "plot_thd_bars",
    "plot_timing",
    "plot_waveform",
    "plot_xy",
]
