#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#define LIB_STR_IMPL
#include <libstr.h>

#define RX_XCR_URL "https://playerservices.streamtheworld.com/api/livestream?station=KMGXFM&transports=http%2Chls&version=1.10&request.preventCache=1735994936887"

size_t rx_curl_write(void *ptr, size_t size, size_t nmemb, void *data) {
  size_t len = size * nmemb;
  char **curl_data = (char **) data;
  str_append_len(curl_data, ptr, len);
  return len;
}

char *rx_resolve(void) {
  CURL *curl = curl_easy_init();
  if (!curl) {
    fprintf(stderr, "CURL init failed!\n");
    return NULL;
  }
  char *curl_data = NULL;
  curl_easy_setopt(curl, CURLOPT_URL, RX_XCR_URL);
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, rx_curl_write);
  curl_easy_setopt(curl, CURLOPT_WRITEDATA, &curl_data);
  CURLcode code = curl_easy_perform(curl);
  if (code != CURLE_OK) {
    curl_easy_cleanup(curl);
    fprintf(stderr, "CURL fetch failed!\n%s\n", curl_easy_strerror(code));
    return NULL;
  }
  curl_easy_cleanup(curl);
  char *url = NULL;
  size_t set = 0;
  for (size_t i = 0; i < strlen(curl_data); i++) {
    if(strncmp(curl_data + i, "<ip>", 4) == 0) {
      set = i + 4;
      continue;
    }
    if (set && curl_data[i] == '<') {
      size_t len = i - set;
      str_append(&url, "https://");
      str_append_len(&url, curl_data + set, len);
      str_append(&url, "/KMGXFM.mp3");
      break;
    }
  }
  free(curl_data);
  return url;
}
