package apiv1

import (
	"encoding/json"
	"fmt"
	"net/http"

	"github.com/axllent/mailpit/config"
)

// Response includes global web UI settings
//
// swagger:model WebUIConfiguration
type webUIConfiguration struct {
	// Message Relay information
	MessageRelay struct {
		// Whether message relaying (release) is enabled
		Enabled bool
		// The configured SMTP server address
		SMTPServer string
		// Enforced Return-Path (if set) for relay bounces
		ReturnPath string
		// Allowlist of accepted recipients
		RecipientAllowlist string
	}

	// Whether the HTML check has been globally disabled
	DisableHTMLCheck bool
}

// WebUIConfig returns configuration settings for the web UI.
func WebUIConfig(w http.ResponseWriter, _ *http.Request) {
	// swagger:route GET /api/v1/webui application WebUIConfiguration
	//
	// # Get web UI configuration
	//
	// Returns configuration settings for the web UI.
	// Intended for web UI only!
	//
	//	Produces:
	//	- application/json
	//
	//	Schemes: http, https
	//
	//	Responses:
	//		200: WebUIConfigurationResponse
	//		default: ErrorResponse
	conf := webUIConfiguration{}

	conf.MessageRelay.Enabled = config.ReleaseEnabled
	if config.ReleaseEnabled {
		conf.MessageRelay.SMTPServer = fmt.Sprintf("%s:%d", config.SMTPRelayConfig.Host, config.SMTPRelayConfig.Port)
		conf.MessageRelay.ReturnPath = config.SMTPRelayConfig.ReturnPath
		conf.MessageRelay.RecipientAllowlist = config.SMTPRelayConfig.RecipientAllowlist
	}

	conf.DisableHTMLCheck = config.DisableHTMLCheck

	bytes, _ := json.Marshal(conf)

	w.Header().Add("Content-Type", "application/json")
	_, _ = w.Write(bytes)
}