require 'gandinet/version'
require 'uri'
require 'net/http'
require 'json'

# Usage
# require 'gandinet'
# client = GandiNet::Client.new("KEY", dryrun: false) # Be careful with dry run!
# client.domains # Get them
module GandiNet
  class Error < StandardError; end

  class Client
    attr_accessor :key
    attr_accessor :dryun
    def initialize(key=nil, dryrun:true)
      puts "Please provide an API Key." unless key
      @key = key
      @dryrun = dryrun
    end
    def domains
      url = URI("https://api.gandi.net/v5/domain/domains")
      http = Net::HTTP.new(url.host, url.port)
      http.use_ssl = true
      request = Net::HTTP::Get.new(url)
      request["authorization"] = "Apikey #{key}"
      response = http.request(request)
      JSON.parse(response.read_body)
    end
    # client.create("...","...",...)
    def create(fqdn,given,family,country,streetaddr,orgname,email,phone,zip,city)
      url = URI("https://api.gandi.net/v5/domain/domains")
      http = Net::HTTP.new(url.host, url.port)
      http.use_ssl = true
      request = Net::HTTP::Post.new(url)
      request["authorization"] = "Apikey #{key}"
      request["dry-run"] = "1" if @dryrun
      request["content-type"] = 'application/json'
      #puts { fqdn: fqdn, owner: { given: given, family: family, country: country, streetaddr: streetaddr, type: "1", orgname: orgname, email: email, phone: phone, zip: zip, city: city}}.to_json
      request.body = "{\"fqdn\":\"#{fqdn}\",\"owner\":{\"given\":\"#{given}\",\"family\":\"#{family}\",\"country\":\"#{country}\",\"streetaddr\":\"#{streetaddr}\",\"type\":1,\"orgname\":\"#{orgname}\",\"email\":\"#{email}\",\"phone\":\"#{phone}\",\"zip\":\"#{zip}\",\"city\":\"#{city}\"}}"
      response = http.request(request)
      JSON.parse(response.read_body)
    end
    # client.info("DOMAIN")
    def info(fqdn)
      url = URI("https://api.gandi.net/v5/domain/domains/#{fqdn}")
      http = Net::HTTP.new(url.host, url.port)
      http.use_ssl = true
      request = Net::HTTP::Get.new(url)
      request["authorization"] = "Apikey #{key}"
      response = http.request(request)
      JSON.parse(response.read_body)
    end
  end
end