#include "fs/devices/PTYMultiplexer.h"

Bitset<u64> PTYMultiplexer::m_available_indexes = 0;

PTYMultiplexer::PTYMultiplexer()
{
    m_metadata.devid = luna_dev_makedev(DeviceRegistry::Terminal, 0);
    m_metadata.mode = 0666;
}

Result<SharedPtr<VFS::Inode>> PTYMultiplexer::open()
{
    int index = -1;
    for (int i = 0; i < 64; i++)
    {
        if (!m_available_indexes.get(i))
        {
            index = i;
            m_available_indexes.set(i, true);
            break;
        }
    }
    if (index == -1) return err(ENOSPC);

    return MasterPTY::create_pair(index);
}

void PTYMultiplexer::init()
{
    m_available_indexes.clear();
}

void PTYMultiplexer::did_remove_pty(int index)
{
    m_available_indexes.set(index, false);
}