package inwx

import (
	"golang.org/x/net/idna"
)

const (
	// https://www.inwx.com/en/help/apidoc/f/ch03.html#type.dnssecdomainstatus
	// claims status values can be 'DELETE_ALL', 'MANUAL', 'UPDATE', but
	// testing shows 'AUTO' is what to expect if the domain has automatic
	// DNSSEC enabled.

	// AutoDNSSEC is the status for DNSSEC enabled with automatic management
	AutoDNSSECStatus = "AUTO"
	// ManualDNSSEC is the status for DNSSEC enabled with manual management
	ManualDNSSECStatus = "MANUAL"
)

// DNSSecStatus returns domain dnssec status
func (api *inwxAPI) DNSSecStatus(domain string) (string, error) {

	resp, err := api.client.Dnssec.Info([]string{domain})
	if err != nil {
		return "", err
	}

	// domain has no DNSSEC configuration
	if len(resp.Data) == 0 {
		return "", nil
	}

	return resp.Data[0].DNSSecStatus, nil
}

// enableAutoDNSSEC enables automatic management of DNSSEC
func (api *inwxAPI) enableAutoDNSSEC(domain string) error {
	// if the domain is IDN, it must be in Unicode - ACE encoding is not supported
	// in the INWX dnssec.enablednssec endpoint
	domain, err := idna.ToUnicode(domain)
	if err != nil {
		return err
	}

	err = api.client.Dnssec.Enable(domain)

	return err
}

// disableAutoDNSSEC disables automatic management of DNSSEC
func (api *inwxAPI) disableAutoDNSSEC(domain string) error {

	err := api.client.Dnssec.Disable(domain)

	return err
}
