package influxutil

import (
	"fmt"
	"net/http"
	"strings"

	"github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil"
)

var influxDatabaseNames = flagutil.NewArrayString("influx.databaseNames", "Comma-separated list of database names to return from /query and /influx/query API. "+
	"This can be needed for accepting data from Telegraf plugins such as https://github.com/fangli/fluent-plugin-influxdb")

// WriteDatabaseNames writes influxDatabaseNames to w.
func WriteDatabaseNames(w http.ResponseWriter) {
	// Emulate fake response for influx query.
	// This is required for TSBS benchmark and some Telegraf plugins.
	// See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1124
	w.Header().Set("Content-Type", "application/json")
	dbNames := *influxDatabaseNames
	if len(dbNames) == 0 {
		dbNames = []string{"_internal"}
	}
	dbs := make([]string, len(dbNames))
	for i := range dbNames {
		dbs[i] = fmt.Sprintf(`[%q]`, dbNames[i])
	}
	fmt.Fprintf(w, `{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[%s]}]}]}`, strings.Join(dbs, ","))
}

// WriteHealthCheckResponse writes response for influx ping to w.
func WriteHealthCheckResponse(w http.ResponseWriter) {
	// Emulate fake response for influx ping.
	// This is needed for some clients to detect whether InfluxDB is available.
	// See:
	// - https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6653
	// - https://docs.influxdata.com/influxdb/v2/api/#operation/GetHealth

	fmt.Fprintf(w, `{"name":"influxdb", "message":"ready for queries and writes", "status":"pass", "checks":[]}`)
}
