export {};
const axios = require('axios');
const { apiResponse } = require('../../core/response/response');
const { SUCCESS, SERVER_ERROR } = require('../../core/response/statusCode');
const { ERROR_MSG } = require('../../core/response/messages');

// POST https://api.daily.co/v1/rooms
// Optional: POST https://api.daily.co/v1/meeting-tokens

exports.createDailyRoom = async (req, res) => {
  const lang = req.headers['accept-language'] || 'en';
  try {
    const API_KEY = process.env.DAILY_API_KEY;
    if (!API_KEY) {
      return apiResponse(res, true, [], 'Daily API key not configured', SERVER_ERROR.internalServerError, 0, [], req);
    }

    // Basic room options; adjust as needed
    const roomPayload = {
      // name: undefined -> Daily will generate
      privacy: 'private', // private -> requires tokens; 'public' to allow open join
      properties: {
        enable_chat: true,
        enable_screenshare: true,
        enable_knocking: true,
      },
    };

    const roomResp = await axios.post('https://api.daily.co/v1/rooms', roomPayload, {
      headers: {
        Authorization: `Bearer ${API_KEY}`,
        'Content-Type': 'application/json',
        Accept: 'application/json',
      },
      timeout: 15000,
    });

    const room = roomResp.data;

    // Create an access token for the room (recommended when privacy is private)
    let token = null;
    try {
      const tokenResp = await axios.post(
        'https://api.daily.co/v1/meeting-tokens',
        {
          properties: {
            room_name: room.name,
            is_owner: false,
          },
        },
        {
          headers: {
            Authorization: `Bearer ${API_KEY}`,
            'Content-Type': 'application/json',
            Accept: 'application/json',
          },
          timeout: 10000,
        }
      );
      token = tokenResp.data?.token || null;
    } catch (e) {
      // If token creation fails, still return room URL; client can try without token if privacy public
      token = null;
    }

    const responseData = {
      name: room.name,
      url: room.url,
      token,
    };
    return apiResponse(res, false, [], '', SUCCESS.OK, 1, responseData, req);
  } catch (error) {
    const message = error?.response?.data?.error || ERROR_MSG[`SYSTEM-ERROR-${lang}`];
    return apiResponse(res, true, [], message, SERVER_ERROR.internalServerError, 0, [], req);
  }
};
