#pragma once

#include <tqobject.h>
#include <tqstring.h>

class TQWidget;

class AudioDevice : public TQObject
{
    TQ_OBJECT

public:
    enum Category {
        Output,      // sinks, hardware output
        Input,       // sources, hardware input
        Playback,    // sink inputs (per-app playback streams)
        Recording,   // source outputs (per-app recording streams)
    };

    AudioDevice( TQObject *parent = 0 ) : TQObject(parent) {}
    virtual ~AudioDevice() {}

    virtual TQString     name()     const = 0;
    virtual TQString     iconName() const = 0;
    virtual Category    category() const = 0;

    virtual int  volume()            const = 0;  // 0-100
    virtual bool muted()             const = 0;
    virtual int  pan()               const = 0;  // -50 (left) .. 0 .. +50 (right)
    virtual bool recordingActive()   const = 0;  // true when ≥1 stream is capturing from this input

    virtual void setVolume( int v )        = 0;
    virtual void setMuted( bool m )        = 0;
    virtual void setPan( int p )           = 0;

    // Creates the widget for this device. Caller takes ownership.
    virtual TQWidget *createWidget( TQWidget *parent ) = 0;

signals:
    void volumeChanged( int v );
    void muteChanged( bool m );
    void panChanged( int p );
    void levelChanged( float level );
    void nameChanged( const TQString &name );
    void recordingActiveChanged( bool active );
};
