// AUTHORED SHIM (not copied). CRI ADX2 (Atom) audio + CRI Mana (movie) middleware.
// A precompiled SDK with no decompiled source, referenced by the copied audio/movie
// engine files (Cute/AudioManager.cs, Voice.cs, Se.cs, Effect.cs, MoviePlayer.cs).
// Pure cosmetic surface — never on the battle-resolution path; every member is a no-op
// returning a safe default. Signatures mirror the real CRI API as exercised by the
// decomp (arg counts/types taken from the call sites) so the copied code compiles.
using System;

namespace CriWare
{
    // ---- CRI Atom (audio) ----
    public class CriAtomExPlayer
    {
        public void SetFadeOutTime(int ms) { }
        public void SetFadeInTime(int ms) { }
        public void SetFadeInStartOffset(int ms) { }
        public void SetStartTime(long ms) { }
        public void ResetFaderParameters() { }
        public void Update(CriAtomExPlayback playback) { }
        public void AttachFader() { }
    }

    public static class CriAtomExCategory
    {
        public static void Mute(string categoryName, bool mute) { }
        public static void Pause(string categoryName, bool sw) { }
        public static void SetVolume(string categoryName, float volume) { }
    }

    public struct CriAtomExPlayback
    {
        public bool GetNumPlayedSamples(out long numSamples, out int samplingRate)
        { numSamples = 0L; samplingRate = 0; return false; }
    }

    public class CriAtomExAcb : IDisposable
    {
        public void Dispose() { }
        public bool GetCueInfo(int index, out CriAtomEx.CueInfo cueInfo)
        { cueInfo = default; return false; }
    }

    public static class CriAtomEx
    {
        public struct CueInfo { public long length; }
    }

    public class CriAtomCueSheet { public CriAtomExAcb acb => null; }

    public class CriAtomSource : UnityEngine.MonoBehaviour
    {
        public enum Status { Stop, Prep, Playing, PlayEnd, Removed, Removing, Error }
        public Status status => Status.Stop;
        public CriAtomExPlayer player { get; } = new CriAtomExPlayer();
        public bool loop;
        public bool playOnStart;
        public float volume;
        public bool use3dPositioning;
        public string cueSheet;
        public string cueName;
        public CriAtomExPlayback Play() => default;
        public CriAtomExPlayback Play(int cueId) => default;
        public CriAtomExPlayback Play(string cue) => default;
        public CriAtomExPlayback Play(string sheet, string cue) => default;
        public void Stop() { }
        public void Pause(bool sw) { }
        public void Pause() { }
        public void SetAisacControl(string name, float value) { }
        public void SetAisacControl(uint id, float value) { }
    }

    public static class CriAtom
    {
        public static CriAtomCueSheet AddCueSheet(string name, string acbPath, string awbPath) => null;
        public static CriAtomCueSheet GetCueSheet(string name) => null;
        public static void RemoveCueSheet(string name) { }
        public static CriAtomExAcb GetAcb(string acbName) => null;
        public static void AttachDspBusSetting(string name) { }
    }

    // ---- CRI Mana (movie) ----  (CriManaMovieMaterial lives in External/SdkStubs.cs)
    public class CriFsBinder { }
}

namespace CriWare.CriMana
{
    public struct MovieInfo
    {
        public uint framerateN;
        public uint totalFrames;
    }

    public class Player
    {
        public enum Status { Stop, Decheader, WaitPrep, Prep, Ready, Playing, PlayEnd, Error, StopProcessing }
        public Status status => Status.Stop;
        public MovieInfo movieInfo => default;
        public long GetTime() => 0L;
        public bool IsPaused() => false;
        public void Pause(bool sw) { }
        public void Prepare() { }
        public void Start() { }
        public void Stop() { }
        public void SetFile(CriFsBinder binder, string moviePath) { }
        public void SetSeekPosition(int frameNumber) { }
        public void SetVolume(float volume) { }
    }
}
