// programs/input.js
'use strict';

const fs = require('fs');
const path = require('path');

function byIdCaptureCandidates() {
  const dir = '/dev/v4l/by-id';
  try {
    if (!fs.existsSync(dir)) return [];
    return fs.readdirSync(dir)
      .filter(n => n.endsWith('-index0'))
      .map(n => fs.realpathSync(path.join(dir, n)));
  } catch {
    return [];
  }
}

function naiveVideoNodes() {
  try {
    return fs.readdirSync('/dev')
      .filter(n => /^video\d+$/.test(n))
      .map(n => path.join('/dev', n))
      .sort((a, b) => Number(a.replace(/\D/g, '')) - Number(b.replace(/\D/g, '')));
  } catch {
    return ['/dev/video0', '/dev/video2'];
  }
}

function pickDevices(env = process.env) {
  const DEV0 = env.DEV0 || null;
  const DEV1 = env.DEV1 || null;

  if (DEV0 && DEV1) return [DEV0, DEV1];

  const byId = byIdCaptureCandidates();
  if (DEV0 || DEV1) {
    const pool = byId.length ? byId : naiveVideoNodes();
    const d0 = DEV0 || pool[0];
    const d1 = DEV1 || pool.find(d => d !== d0) || pool[1];
    return [d0, d1];
  }

  if (byId.length >= 2) return [byId[0], byId[1]];
  const naive = naiveVideoNodes();
  return [naive[0], naive[1]];
}

module.exports = { pickDevices };