// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef EMBEDDERS_OPENGLUI_COMMON_SOUND_HANDLER_H_
#define EMBEDDERS_OPENGLUI_COMMON_SOUND_HANDLER_H_

#include <stdint.h>
#include <vector>

#include "embedders/openglui/common/sample.h"

class SoundHandler {
  public:
    SoundHandler();

    virtual ~SoundHandler() {
    }

    virtual int32_t Start() {
      return 0;
    }

    virtual void Stop() {
    }

    virtual int32_t Suspend() {
      return 0;
    }

    virtual int32_t Resume() {
      return 0;
    }

    virtual int32_t PlayBackground(const char* path) {
      return 0;
    }

    virtual void StopBackground() {
    }

    // Optional, for preloading.
    int32_t LoadSample(const char* path) {
       return (GetSample(path) == NULL) ? -1 : 0;
    }

    virtual int32_t PlaySample(const char* path) {
      return 0;
    }

    static SoundHandler* instance() {
      return instance_;
    }

  protected:
    typedef std::vector<Sample*> samples_t;

    Sample* GetSample(const char* path);

    samples_t samples_;

    static SoundHandler* instance_;
};

int32_t PlayBackgroundSound(const char* path);
void StopBackgroundSound();
int32_t LoadSoundSample(const char* path);
int32_t PlaySoundSample(const char* path);

#endif  // EMBEDDERS_OPENGLUI_COMMON_SOUND_HANDLER_H_

