#include "driver_internal.h"

int audrvDeviceSinkAdd(AudioDriver* d, const char* device_name, int num_channels, const u8* channel_ids)
{
    if (!device_name || num_channels < 1 || num_channels > 6 || !channel_ids)
        return -1;

    int id = d->etc->first_free_sink;
    if (id < 0)
        return -1;

    d->etc->first_free_sink = d->etc->sinks[id].next_free;
    d->in_sinks[id].type = AudioRendererSinkType_Device;
    d->in_sinks[id].is_used = true;
    d->in_sinks[id].node_id = AUDREN_NODEID(3,id,0);
    strncpy(d->in_sinks[id].device_sink.name, device_name, sizeof(d->in_sinks[id].device_sink.name)-1);
    d->in_sinks[id].device_sink.input_count = num_channels;
    memcpy(d->in_sinks[id].device_sink.inputs, channel_ids, num_channels);

    return id;
}

void audrvSinkRemove(AudioDriver* d, int id)
{
    if (id < 0 || id >= d->config.num_sinks)
        return;
    if (!d->in_sinks[id].is_used)
        return;

    d->etc->sinks[id].next_free = d->etc->first_free_sink;
    d->etc->first_free_sink = id;
    memset(&d->in_sinks[id], 0, sizeof(AudioRendererSinkInfoIn));
}