require "authd"
require "ipc"
require "../src/client.cr"
require "http/server"

port = ARGV[0].to_i rescue 8080
addr = ARGV[1]      rescue "127.0.0.1"

#login = ENV["LOGIN"]
#pass  = ENV["PASS"]

dnsmanagerd = DNSManager::Client.new
#dnsmanagerd.login login, pass

server = HTTP::Server.new do |context|
	ip = case addr
	when "127.0.0.1"
		a = context.request.remote_address.not_nil!
		case a
		when Socket::IPAddress
			a.address.to_s
		when Socket::UNIXAddress
			next
		end
	else
		context.request.headers["Host"] rescue next
	end

	next if ip.nil?
	pp! ip

	case context.request.path
	when /^\/token-update\/(?<token>[a-z0-9-]+)/
		token = $~["token"]
		if token.nil?
			context.response.status_code = 404
			context.response.print "invalid token"
		else
			context.response.content_type = "text/html"
			context.response.print "token: #{token} from #{ip}"
			begin
				response = dnsmanagerd.use_token token, ip
				case response
				when DNSManager::Response::Success
					context.response.print "; Success!" # 🔻
				when DNSManager::Response::Error
					puts "error while updating token: #{response.reason}"
					context.response.print "; command failed: #{response.reason}" # âš 
				end
			rescue e
				puts "error while updating token: #{e}"
				context.response.print "; The command failed!" # âš 
			end
		end
	else
		context.response.status_code = 404
		context.response.print "Not found"
	end
end

address = server.bind_tcp addr, port
puts "Receiving tokens on http://#{address}/token-update/<token>"
server.listen