const https = require('https');
const urlModule = require('url');

exports.handler = async function(event, context) {
  let { url } = event.queryStringParameters;

  if (!url) {
    return {
      statusCode: 400,
      body: JSON.stringify({ error: 'url query parameter is required' }),
    };
  }

  // Extract hostname from URL
  const parsedUrl = new URL(url);
  const domain = parsedUrl.hostname;

  const dnsTypes = ['DNSKEY', 'DS', 'RRSIG'];
  const records = {};

  for (const type of dnsTypes) {
    const options = {
      hostname: 'dns.google',
      path: `/resolve?name=${encodeURIComponent(domain)}&type=${type}`,
      method: 'GET',
      headers: {
        'Accept': 'application/dns-json'
      }
    };

    try {
      const dnsResponse = await new Promise((resolve, reject) => {
        const req = https.request(options, res => {
          let data = '';
          
          res.on('data', chunk => {
            data += chunk;
          });

          res.on('end', () => {
            resolve(JSON.parse(data));
          });
        });

        req.on('error', error => {
          reject(error);
        });

        req.end();
      });

      if (dnsResponse.Answer) {
        records[type] = { isFound: true, answer: dnsResponse.Answer, response: dnsResponse.Answer };
      } else {
        records[type] = { isFound: false, answer: null, response: dnsResponse};
      }
    } catch (error) {
      return {
        statusCode: 500,
        body: JSON.stringify({ error: `Error fetching ${type} record: ${error.message}` }),
      };
    }
  }

  return {
    statusCode: 200,
    body: JSON.stringify(records),
  };
};