package main

import (
	"context"

	"github.com/go-openapi/loads"
	"github.com/nspcc-dev/neofs-rest-gw/gen/restapi"
	"github.com/nspcc-dev/neofs-rest-gw/gen/restapi/operations"
	"go.uber.org/zap"
)

func main() {
	ctx := context.Background()

	v := config()
	logger := newLogger(v)

	neofsAPI, err := newNeofsAPI(ctx, logger, v)
	if err != nil {
		logger.Fatal("init neofs", zap.Error(err))
	}

	swaggerSpec, err := loads.Analyzed(restapi.SwaggerJSON, "")
	if err != nil {
		logger.Fatal("init spec", zap.Error(err))
	}

	api := operations.NewNeofsRestGwAPI(swaggerSpec)
	server := restapi.NewServer(api, serverConfig(v))
	defer func() {
		if err = server.Shutdown(); err != nil {
			logger.Error("shutdown", zap.Error(err))
		}
	}()

	server.ConfigureAPI(neofsAPI.Configure)

	// serve API
	if err = server.Serve(); err != nil {
		logger.Fatal("serve", zap.Error(err))
	}
}