package config

import (
	"context"
	"net/http"

	"github.com/duke-git/lancet/v2/slice"
	"go.uber.org/zap"

	"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 {
	if IsLocalEnv() {
		return []string{"*"}
	}
	allowOrigins := slice.Concat(devAllowOrigins, stagingAllowOrigins, prodAllowOrigins)
	tilog.Info(context.Background(), "GetCorsAllowOrigins result", zap.Any("allowOrigins", allowOrigins))
	return allowOrigins
}

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(),
		AllowCredentials: true,
	}
}
