package wray

type Response struct {
  id string
  channel string
  successful bool
  clientId string
  supportedConnectionTypes []string
  messages []Message
  error error
}

type Message struct {
  Channel string
  Id string
  Data map[string]interface{}
}

func newResponse(data []interface{}) Response {
  headerData := data[0].(map[string]interface{})
  messagesData := data[1.:]
  messages := parseMessages(messagesData)
  var id string
  if headerData["id"] != nil {
    id = headerData["id"].(string)
  }
  supportedConnectionTypes := []string{}
  if headerData["supportedConnectionTypes"] != nil {
    d := headerData["supportedConnectionTypes"].([]interface{})
    for _, sct := range(d) {
      supportedConnectionTypes = append(supportedConnectionTypes, sct.(string))
    }
  }
  var clientId string
  if headerData["clientId"] != nil {
    clientId = headerData["clientId"].(string)
  }
  return Response{id: id,
                  clientId: clientId,
                  channel: headerData["channel"].(string),
                  successful: headerData["successful"].(bool),
                  messages: messages,
                  supportedConnectionTypes: supportedConnectionTypes}
}

func parseMessages(data []interface{}) []Message {
  messages := []Message{}
  for _, messageData := range(data) {
    m := messageData.(map[string]interface{})
    var id string
    if m["id"] != nil {
      id = m["id"].(string)
    }
    message := Message{Channel: m["channel"].(string),
                       Id: id,
                       Data: m["data"].(map[string]interface{})}
    messages = append(messages, message)
  }
  return messages
}