// Node 22 a WebSocket natif
const HA_WS = process.env.HA_URL.replace('http://', 'ws://').replace('https://', 'wss://') + '/api/websocket';
const TOKEN = process.env.HA_TOKEN;

let msgId = 1;
const pending = {};
const ws = new WebSocket(HA_WS);

function send(msg) {
  return new Promise((resolve) => {
    const id = msgId++;
    msg.id = id;
    pending[id] = resolve;
    ws.send(JSON.stringify(msg));
  });
}

ws.addEventListener('message', ({ data }) => {
  const msg = JSON.parse(data);
  if (msg.type === 'auth_required') {
    ws.send(JSON.stringify({ type: 'auth', access_token: TOKEN }));
  } else if (msg.type === 'auth_ok') {
    console.log('✅ Auth OK, HA:', msg.ha_version);
    main().catch(console.error);
  } else if (msg.id && pending[msg.id]) {
    pending[msg.id](msg);
    delete pending[msg.id];
  }
});

async function main() {
  // Lister les dashboards
  const dashboards = await send({ type: 'lovelace/dashboards/list' });
  console.log('\n📋 Dashboards:', JSON.stringify(dashboards.result || dashboards.error, null, 2));
  
  // Config dashboard par défaut
  const config = await send({ type: 'lovelace/config' });
  if (config.result) {
    console.log('\n📄 Mode: storage');
    console.log('Views:', config.result.views?.map(v => v.title || v.path));
  } else {
    console.log('\n📄 Config défaut:', JSON.stringify(config, null, 2).substring(0, 600));
  }

  ws.close();
}

ws.addEventListener('error', (e) => { console.error('WS Error:', e.message); process.exit(1); });
setTimeout(() => { console.error('Timeout'); process.exit(1); }, 10000);
