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

/**
 * STEP 1: 크롬 확장 앱으로부터 첫 4바이트를 통해 데이터 크기를 입력받는다.
 * STEP 2: 첫 4바이트 이후로 데이터 크기만큼 데이터를 입력받는다.
 * STEP 3: 전달받은 데이터를 처리한다.
 * STEP 4: 응답할 데이터 크기를 첫 4바이트에 입력한다.
 * STEP 5: 응답할 데이터를 첫 4바이트 이후에 입력한다.
 * STEP 6: 해당 데이터를 버퍼에 담아 전송한다.
 */

process.stdin.on('readable', () => {
  let chunk;
  let data;
  let iLen = 0;
  let result = null;

  if((chunk = process.stdin.read()) == null){
    return;
  }

  /* EXAMPLE: 0004abcd */
  let buffer = new Buffer(chunk);

  /* INFO: 첫 4바이트는 데이터의 크기를 입력받는다. */
  let receiveDataSizeBuffer = Buffer.from(buffer, 0, 4);
  iLen = receiveDataSizeBuffer.readInt32LE();
  /* INFO: 4바이트 이후 나머지는 데이터를 나타낸다. */
  data = buffer.toString('utf8', 4, 4 + iLen);
  
  /* INFO: 획득한 데이터를 파일에 기록한다. */
  try{
    fs.writeFileSync('./output.txt', `length: ${iLen}, data: ${data}`);
  }
  catch(ex){
    return;
  }

  /* INFO: 데이터 쓰기 완료 문자열 */
  result = 'data writing SUCCESS';

  /* INFO: 전송할 데이터도 첫 4바이트는 크기, 나머지는 데이터를 표현한다. */
  let sendDataSizeBuffer = Buffer.alloc(4);
  sendDataSizeBuffer.writeInt32LE(result.length, 0);
  
  let sendBuffer = new Buffer(sendDataSizeBuffer + `${result}`, 'utf8');

  process.stdout.write(sendBuffer);

  process.exit(0);
});