package databag

import (
  "encoding/json"
  "net/http"
  "errors"
  "bytes"
  "strings"
)

func getIce(service string, urls string, username string, credential string) ([]IceURL, error) {

  if service != "" {
    gen := "https://rtc.live.cloudflare.com/v1/turn/keys/" + username + "/credentials/generate"
    req, err := http.NewRequest(http.MethodPost, gen, bytes.NewBuffer([]byte("{\"ttl\": 86400}")))
    if err != nil {
      return nil, err
    }
    req.Header.Set("Content-Type", "application/json; charset=utf-8")
    req.Header.Set("Authorization", "Bearer " + credential)
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil || resp == nil || resp.StatusCode != 201 {
      return nil, errors.New("invalid ice service response")
    }

    var r IceService
    err = json.NewDecoder(resp.Body).Decode(&r)
    if err != nil {
      return nil, errors.New("invalid ice service response")
    }

    ice := []IceURL{}
    for _, url := range r.Servers.URLs {
      ice = append(ice, IceURL{ URLs: url, Username: r.Servers.Username, Credential: r.Servers.Credential });
    }
    return ice, nil
  }

  return []IceURL {
    IceURL {
      URLs: urls,
      Username: username,
      Credential: credential,
    },
  }, nil
}

func getDefaultIce(ice []IceURL) IceURL {
  for _, url := range ice {
    if strings.HasSuffix(url.URLs, "?transport=udp") {
      return url
    }
  }
  return ice[0];
}