require "json"
require "../src/storage/zone.cr"

alias DSZ = DNSManager::Storage::Zone

#
# Create a zone file.
#

if ARGV.size < 1
	puts "usage: domain"
	exit 0
end

domain = ARGV[0]
zone = DSZ.new domain

#
# Add some values.
#

zone << DSZ::SOA.new  "#{domain}.", # name
  3600.to_u32,                      # TTL
  "ns0.#{domain}.",                 # Master Name Server for the zone
  "dnsmaster.#{domain}.",           # admin email address
  2024112500.to_u64,                # serial
        3600.to_u64,                # refresh
         600.to_u64,                # retry
     2419200.to_u64,                # expire
         600.to_u64                 # minimum TTL

# NS: name ttl target
zone << DSZ::NS.new "#{domain}.", 3600.to_u32, "ns0.karchnu.fr."
zone << DSZ::NS.new "#{domain}.", 3600.to_u32, "ns1.karchnu.fr."

# All default values are read-only (by default).
# Still, some dedicated messages can change some of these values, but the default behavior is to protect my SANITY.
# DO NOT ALLOW USERS TO MESS WITH IMPORTANT VALUES UNLESS YOU CHECK IT INTENSIVELY.
zone.resources.each do |rr|
	rr.readonly = true
end

File.write("#{domain}.json", zone.to_json)