// Package main boots the HTTP API server for Query Comparison.
package main

import (
	"fmt"
	"os"

	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/config"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/log"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/server"
	clinictracing "github.com/pingcap-inc/clinic/clinic_data_service/pkg/tracing"

	"go.opentelemetry.io/otel"
	sdktrace "go.opentelemetry.io/otel/sdk/trace"
)

// main loads configuration, initializes logging and starts the Gin router.
//
//	@title					Clinic Data Service API
//	@version				1.0
//	@description			Clinic Data Proxy and diagnostic service APIs.
//	@BasePath				/
//	@securityDefinitions.apikey	BearerAuth
//	@in					header
//	@name					Authorization
//	@description			Use `Bearer <clinic-api-key>`.
func main() {
	if err := config.LoadConfig(); err != nil {
		fmt.Println(err)
		panic(err)
	}
	if err := log.InitLog(config.AppConfig.LogDir); err != nil {
		fmt.Println(err)
		panic(err)
	}
	initTelemetry()
	r := server.NewRouter()
	addr := os.Getenv("API_ADDR")
	if addr == "" {
		addr = ":8087"
	}
	if err := r.Run(addr); err != nil {
		panic(err)
	}
}

func initTelemetry() {
	tp := sdktrace.NewTracerProvider(
		sdktrace.WithSampler(sdktrace.ParentBased(sdktrace.TraceIDRatioBased(0.1))),
	)
	otel.SetTracerProvider(tp)
	clinictracing.ConfigurePropagation()
	clinictracing.InstrumentDefaultHTTPClient()
}
