require 'sendgrid-ruby'

sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])

##################################################
# Create a domain authentication. #
# POST /whitelabel/domains #

data = JSON.parse('{
  "automatic_security": false,
  "custom_spf": true,
  "default": true,
  "domain": "example.com",
  "ips": [
    "192.168.1.1",
    "192.168.1.2"
  ],
  "subdomain": "news",
  "username": "john@example.com"
}')
response = sg.client.whitelabel.domains.post(request_body: data)
puts response.status_code
puts response.body
puts response.headers

##################################################
# List all domain authentications. #
# GET /whitelabel/domains #

params = JSON.parse('{"username": "test_string", "domain": "test_string", "exclude_subusers": "true", "limit": 1, "offset": 1}')
response = sg.client.whitelabel.domains.get(query_params: params)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Get the default domain authentication. #
# GET /whitelabel/domains/default #

response = sg.client.whitelabel.domains.default.get
puts response.status_code
puts response.body
puts response.headers

##################################################
# List the domain authentication associated with the given user. #
# GET /whitelabel/domains/subuser #

response = sg.client.whitelabel.domains.subuser.get
puts response.status_code
puts response.body
puts response.headers

##################################################
# Disassociate a domain authentication from a given user. #
# DELETE /whitelabel/domains/subuser #

response = sg.client.whitelabel.domains.subuser.delete
puts response.status_code
puts response.body
puts response.headers

##################################################
# Update a domain authentication. #
# PATCH /whitelabel/domains/{domain_id} #

data = JSON.parse('{
  "custom_spf": true,
  "default": false
}')
domain_id = 'test_url_param'
response = sg.client.whitelabel.domains._(domain_id).patch(request_body: data)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Retrieve a domain authentication. #
# GET /whitelabel/domains/{domain_id} #

domain_id = 'test_url_param'
response = sg.client.whitelabel.domains._(domain_id).get
puts response.status_code
puts response.body
puts response.headers

##################################################
# Delete a domain authentication. #
# DELETE /whitelabel/domains/{domain_id} #

domain_id = 'test_url_param'
response = sg.client.whitelabel.domains._(domain_id).delete
puts response.status_code
puts response.body
puts response.headers

##################################################
# Associate a domain authentication with a given user. #
# POST /whitelabel/domains/{domain_id}/subuser #

data = JSON.parse('{
  "username": "jane@example.com"
}')
domain_id = 'test_url_param'
response = sg.client.whitelabel.domains._(domain_id).subuser.post(request_body: data)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Add an IP to a domain authentication. #
# POST /whitelabel/domains/{id}/ips #

data = JSON.parse('{
  "ip": "192.168.0.1"
}')
id = 'test_url_param'
response = sg.client.whitelabel.domains._(id).ips.post(request_body: data)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Remove an IP from a domain authentication. #
# DELETE /whitelabel/domains/{id}/ips/{ip} #

id = 'test_url_param'
ip = 'test_url_param'
response = sg.client.whitelabel.domains._(id).ips._(ip).delete
puts response.status_code
puts response.body
puts response.headers

##################################################
# Validate a domain authentication. #
# POST /whitelabel/domains/{id}/validate #

id = 'test_url_param'
response = sg.client.whitelabel.domains._(id).validate.post
puts response.status_code
puts response.body
puts response.headers

##################################################
# Create a reverse DNS record #
# POST /whitelabel/ips #

data = JSON.parse('{
  "domain": "example.com",
  "ip": "192.168.1.1",
  "subdomain": "email"
}')
response = sg.client.whitelabel.ips.post(request_body: data)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Retrieve a reverse DNS record #
# GET /whitelabel/ips #

params = JSON.parse('{"ip": "test_string", "limit": 1, "offset": 1}')
response = sg.client.whitelabel.ips.get(query_params: params)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Retrieve a reverse DNS record #
# GET /whitelabel/ips/{id} #

id = 'test_url_param'
response = sg.client.whitelabel.ips._(id).get
puts response.status_code
puts response.body
puts response.headers

##################################################
# Delete a reverse DNS record #
# DELETE /whitelabel/ips/{id} #

id = 'test_url_param'
response = sg.client.whitelabel.ips._(id).delete
puts response.status_code
puts response.body
puts response.headers

##################################################
# Validate a reverse DNS record #
# POST /whitelabel/ips/{id}/validate #

id = 'test_url_param'
response = sg.client.whitelabel.ips._(id).validate.post
puts response.status_code
puts response.body
puts response.headers

##################################################
# Create a Branded Link #
# POST /whitelabel/links #

data = JSON.parse('{
  "default": true,
  "domain": "example.com",
  "subdomain": "mail"
}')
params = JSON.parse('{"limit": 1, "offset": 1}')
response = sg.client.whitelabel.links.post(request_body: data, query_params: params)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Retrieve all link brandings #
# GET /whitelabel/links #

params = JSON.parse('{"limit": 1}')
response = sg.client.whitelabel.links.get(query_params: params)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Retrieve a Default Link Branding #
# GET /whitelabel/links/default #

params = JSON.parse('{"domain": "test_string"}')
response = sg.client.whitelabel.links.default.get(query_params: params)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Retrieve Associated Link Branding #
# GET /whitelabel/links/subuser #

params = JSON.parse('{"username": "test_string"}')
response = sg.client.whitelabel.links.subuser.get(query_params: params)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Disassociate a Link Branding #
# DELETE /whitelabel/links/subuser #

params = JSON.parse('{"username": "test_string"}')
response = sg.client.whitelabel.links.subuser.delete(query_params: params)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Update a Link Branding #
# PATCH /whitelabel/links/{id} #

data = JSON.parse('{
  "default": true
}')
id = 'test_url_param'
response = sg.client.whitelabel.links._(id).patch(request_body: data)
puts response.status_code
puts response.body
puts response.headers

##################################################
# Retrieve a Link Branding #
# GET /whitelabel/links/{id} #

id = 'test_url_param'
response = sg.client.whitelabel.links._(id).get
puts response.status_code
puts response.body
puts response.headers

##################################################
# Delete a Link Branding #
# DELETE /whitelabel/links/{id} #

id = 'test_url_param'
response = sg.client.whitelabel.links._(id).delete
puts response.status_code
puts response.body
puts response.headers

##################################################
# Validate a Link Branding #
# POST /whitelabel/links/{id}/validate #

id = 'test_url_param'
response = sg.client.whitelabel.links._(id).validate.post
puts response.status_code
puts response.body
puts response.headers

##################################################
# Associate a Link Branding #
# POST /whitelabel/links/{link_id}/subuser #

data = JSON.parse('{
  "username": "jane@example.com"
}')
link_id = 'test_url_param'
response = sg.client.whitelabel.links._(link_id).subuser.post(request_body: data)
puts response.status_code
puts response.body
puts response.headers
