package config

import (
	"context"
	"fmt"
	"net/http"

	"github.com/tidbcloud/tiinf/monitor/tilog"
	"github.com/tidbcloud/tiinf/sdk/cors"
)

var (
	devAllowOrigins = []string{
		"https://tidbcloud.com",
		"https://*.tidbcloud.com",
		"http://localhost:*",
		"https://*.dev.tidbcloud.com",
		"https://*-dbaas-dev.netlify.app",
		"https://dev.auth.tidbapis.com",
		"https://*partner-dev.netlify.app",
		"https://partner-console.dev.tidbcloud.com",
		"https://dev.console.tidb.io",

		// ops
		"https://*.ops-dev.tidbcloud.com",
		"https://*-management-portal.netlify.app",
	}

	stagingAllowOrigins = []string{
		"https://staging.tidbcloud.com",
		"https://*.staging.tidbcloud.com",
		"https://*staging-tidbcloud.netlify.app",
		"https://*partner-staging.netlify.app",
		"https://partner-console.staging.tidbcloud.com",
		"http://localhost:*",
		"https://staging.console.tidb.io",

		// ops
		"https://ops-staging.tidbcloud.com",
		"https://*-nostalgic-varahamihira-62ba08.netlify.app",
	}

	prodAllowOrigins = []string{
		"https://*.tidbcloud.com",
		"https://tidbcloud.com",
		"https://partner-console.tidbcloud.com",
		"https://auth.tidbapi.com",
		"https://*prod-tidbcloud.netlify.app",
		"https://console.tidb.io",

		// ops
		"https://ops.tidbcloud.com",
		"http://localhost:3000",
		"https://debug.tidbcloud.com",
	}
)

func GetCorsAllowOrigins() []string {
	tilog.Info(context.Background(), fmt.Sprintf("GetCorsAllowOrigins get env: %s", Stage()))
	switch Stage() {
	case StageLocal:
		return []string{"*"}
	case StageDev:
		return devAllowOrigins
	case StageStaging:
		return stagingAllowOrigins
	case StageProd:
		return prodAllowOrigins
	default:
		return []string{}
	}
}

func GetCorsAllowMethods() []string {
	return []string{
		http.MethodHead,
		http.MethodGet,
		http.MethodPost,
		http.MethodPut,
		http.MethodPatch,
		http.MethodDelete,
	}
}

func GetCorsAllowHeaders() []string {
	return []string{"*"}
}

func GetCorsOptions() cors.Options {
	return cors.Options{
		AllowedOrigins: GetCorsAllowOrigins(),
		AllowedMethods: GetCorsAllowMethods(),
		AllowedHeaders: GetCorsAllowHeaders(),
	}
}
