//go:build integration
// +build integration

package integration_test

import (
	"fmt"
	"os"
	"testing"

	"github.com/AlchemyTelcoSolutions/xutils-go/xlogger"
	"github.com/stretchr/testify/suite"

	"github.com/AlchemyTelcoSolutions/callisto-so-bff/cmd/app/config"
	"github.com/AlchemyTelcoSolutions/callisto-so-bff/integration_tests/app"
	suiteclient "github.com/AlchemyTelcoSolutions/callisto-so-bff/integration_tests/suite-client"
	testclient "github.com/AlchemyTelcoSolutions/callisto-so-bff/integration_tests/test-client"
)

func TestIntegrationSuite(t *testing.T) {
	config := config.New()
	err := config.LoadConfigs()
	if err != nil {
		fmt.Printf("error setting up config | %v\n", err)
		os.Exit(1)
	}

	logger, err := xlogger.NewLogger(config.Logger.Level, xlogger.Config{
		LogOutputTo: []string{config.Logger.LogOutput},
		LoggErrsTo:  []string{config.Logger.ErrorOutput},
	}, make(map[string]interface{}))
	if err != nil {
		fmt.Printf("error setting up logger | %v\n", err)
		os.Exit(1)
	}

	testApp := app.NewTestApp(config, logger)

	testClientBuilder := testclient.NewServerClientBuilder().
		SetLogger(logger).
		SetTestApp(testApp).
		SetAppConfig(config)

	server := testClientBuilder.Build()

	suite.Run(t, &saleOrderCreateSuite{
		ClientGenerator: suiteclient.NewClientGenerator(server),
	})

	suite.Run(t, &saleOrderProxySuite{
		ClientGenerator: suiteclient.NewClientGenerator(server),
	})

	suite.Run(t, &saleOrderSummarySuite{
		Log:             logger,
		Server:          testClientBuilder,
		ClientGenerator: suiteclient.NewClientGenerator(server),
	})

	suite.Run(t, &saleOrderUpdateSuite{
		ClientGenerator: suiteclient.NewClientGenerator(server),
	})

	suite.Run(t, &saleOrderExportASNSuite{
		Log:             logger,
		Server:          testClientBuilder,
		ClientGenerator: suiteclient.NewClientGenerator(server),
	})
}
