module Lumberg
  module Whm
    class Dns < Base
      # Creates a DNS zone. All zone information other than domain name and IP address is created based on the standard zone template in WHM.
      # Your MX, nameserver, domain PTR, and A records will all be generated automatically
      #
      # ==== Required
      #  * <tt>:domain</tt> - PENDING
      #  * <tt>:ip</tt> - PENDING
      #
      # ==== Optional
      #  * <tt>:template</tt> - PENDING
      #  * <tt>:trueowner</tt> - PENDING
      def add_zone(options = {})
        server.perform_request('adddns', options)
      end

      # Adds a DNS zone record to the server
      #
      # ==== Required
      #  * <tt>:zone</tt> - PENDING
      #
      # ==== Optional
      #  * <tt>:name</tt> - PENDING
      #  * <tt>:address</tt> - PENDING
      #  * <tt>:type</tt> - PENDING
      #  * <tt>:class</tt> - PENDING
      #  * <tt>:cname</tt> - PENDING
      #  * <tt>:exchange</tt> - PENDING
      #  * <tt>:nsdname</tt> - PENDING
      #  * <tt>:ptdrname</tt> - PENDING
      #  * <tt>:preference</tt> - PENDING
      #  * <tt>:ttl</tt> - PENDING
      def add_zone_record(options = {})
        server.perform_request('addzonerecord', options)
      end

      # Generates a list of all domains and corresponding DNS zones associated with your server
      def list_zones(options = {})
        server.perform_request('listzones', options.merge(response_key: 'zone'))
      end

      # Return zone records for a domain.
      #
      # To use this function most effectively, you may first wish to run the dumpzone function for the domain(s) whose record(s) you wish to retrieve.
      # The Line output variable from that function call can then be used as a reference to create the input for this function.
      #
      # ==== Required
      #  * <tt>:domain</tt> - PENDING
      #  * <tt>:Line</tt> - PENDING
      def get_zone_record(options = {})
        server.perform_request('getzonerecord', options)
      end

      # Retrieves the default nameservers
      #
      # ==== Required
      #  * <tt>:"api.version".to_sym</tt> - PENDING
      def get_nameserver_config(options = {})
        server.perform_request('get_nameserver_config', options.merge(response_key: 'data'))
      end

      # Displays the DNS zone configuration for a specific domain
      #
      # ==== Required
      #  * <tt>:domain</tt> - PENDING
      def dump_zone(options = {})
        server.perform_request('dumpzone', options)
      end

      # Attempts to resolve an IP address for a specified domain name
      #
      # ==== Required
      #  * <tt>:domain</tt> - PENDING
      #  * <tt>:"api.version".to_sym</tt> - PENDING
      def resolve_domain(options = {})
        server.perform_request('resolvedomainname', options.merge(response_key: 'data'))
      end

      # Allows you to edit a DNS zone record on the server.
      #
      # To use this function most effectively, you should first run the dumpzone function for the domain(s) whose record(s) you wish to edit.
      # The output of that function call will be used as a reference to create the input for this function.
      #
      # ==== Required
      #  * <tt>:domain</tt> - PENDING
      #  * <tt>:Line</tt> - PENDING
      #
      # ==== Optional
      #  * <tt>:address</tt> - PENDING
      #  * <tt>:class</tt> - PENDING
      #  * <tt>:cname</tt> - PENDING
      #  * <tt>:exchange</tt> - PENDING
      #  * <tt>:preference</tt> - PENDING
      #  * <tt>:expire</tt> - PENDING
      #  * <tt>:minimum</tt> - PENDING
      #  * <tt>:mname</tt> - PENDING
      def edit_zone_record(options = {})
        server.perform_request('editzonerecord', options)
      end

      # Deletes a DNS zone
      #
      # ==== Required
      #  * <tt>:domain</tt> - PENDING
      def kill_dns(options = {})
        server.perform_request('killdns', options)
      end

      # Obtains the IP address of a registered nameserver from the root nameservers
      #
      # ==== Required
      #  * <tt>:nameserver</tt> - PENDING
      def lookup_nameserver_ip(options = {})
        server.perform_request('lookupnsip', options.merge(response_key: 'ip'))
      end

      # Allows you to remove a DNS zone record from the server.
      #
      # To use this function most effectively, you should first run the dumpzone function for the domain(s) whose record(s) you wish to remove.
      # The output of that function call will be used as a reference to create the input for this function.
      #
      # ==== Required
      #  * <tt>:zone</tt> - PENDING
      #  * <tt>:Line</tt> - PENDING
      def remove_zone_record(options = {})
        server.perform_request('removezonerecord', options)
      end

      # Restore a DNS zone to its default values. This includes any subdomain DNS records associated with the domain.
      #
      # This function can be useful for restoring DNS zones that have become corrupted or have been improperly edited.
      # It will also restore zone file subdomains listed in the server's httpd.conf file, along with default settings for new accounts.
      #
      # ==== Required
      #  * <tt>:domain</tt> - PENDING
      #  * <tt>:zone</tt> - PENDING
      def reset_zone(options = {})
        server.perform_request('resetzone', options)
      end

      # This function will change a specified domain's MX records
      #
      # ==== Required
      #  * <tt>:domain</tt>        - PENDING
      #  * <tt>:exchange</tt>      - PENDING
      #  * <tt>:oldexchange</tt>   - PENDING
      #  * <tt>:oldpreference</tt> - PENDING
      #  * <tt>:preference</tt>    - PENDING
      #  * <tt>:alwaysaccept</tt>  - PENDING
      def change_mx(options = {})
        server.perform_request('changemx', options.merge(response_key: 'data'))
      end

      # This function will add an MX record to a  specified domain
      #
      # ==== Required
      #  * <tt>:domain</tt>        - PENDING
      #  * <tt>:exchange</tt>      - PENDING
      #  * <tt>:preference</tt>    - PENDING
      #  * <tt>:alwaysaccept</tt>  - PENDING
      def add_mx(options = {})
        server.perform_request('addmx', options.merge(response_key: 'data'))
      end

      # This function will list a specified domain's MX records
      #
      # *This function is only available in version 11.27/11.28+*
      #
      # ==== Required
      #  * <tt>:domain</tt> - PENDING
      #  * <tt>:"api.version".to_sym</tt> - PENDING
      def list_mxs(options = {})
        server.perform_request('listmxs', options.merge(response_key: 'data'))
      end

      # This function will add an MX record
      #
      # *This function is only available in version 11.27/11.28+*
      def save_mx(options = {})
        server.perform_request('savemxs', options)
      end
    end
  end
end
