import IPCIDR from 'ip-cidr';
import IPAddress from 'ip-address';

export function isValidMacAddress (mac) {
  try {
    const regex = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/;
    return regex.test(mac);
  } catch (error) {
    return false;
  }
}

export function isValidCidr (cidr, type = 0) {
  let [isV4, isV6] = [false, false];
  let tempCidr = null;

  try {
    if (type === 4) {
      tempCidr = new IPCIDR(cidr);
      if (tempCidr.address.v4) {
        isV4 = true;
      }
    }

    if (type === 6) {
      tempCidr = new IPAddress.Address6(cidr);
      if (!tempCidr.address.v4) {
        isV6 = true;
      }
    }

    if (type === 0) {
      tempCidr = new IPCIDR(cidr);
      if (tempCidr.address.v4) {
        isV4 = true;
      } else {
        isV6 = true;
      }
    }

    return isV4 || isV6;
  } catch (error) {
    return false;
  }
}

export async function clickSelect2Dropdown(page, selectSelector) {
  const select2ContainerSelector = `${selectSelector} + .select2-container`;
  const select2ContainerExists = await page.$(select2ContainerSelector) !== null;

  if (!select2ContainerExists) {
    throw new Error('Select2 container not found');
  }

  const select2Selection = `${select2ContainerSelector} .select2-selection`;
  await page.click(select2Selection);
  await page.waitForSelector('.select2-dropdown .select2-results__option');
}

export async function hasToastText(page, text) {
  try {
    return (await (await page.waitForSelector('.swal2-popup', {state: 'visible'})).textContent()).includes(text);
  } catch (error) {
    console.log(error);
    return false;
  }
}

export async function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}