package main

import (
	"flag"
	"log"
	"net"
	"os"

	gatewayapi "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/api/agent-gateway/gateway/v1"
	"github.com/tidbcloud/aisupport/services/ticket-manager/e2e/fakegateway"
	"google.golang.org/grpc"
)

func main() {
	address := flag.String("address", "127.0.0.1:0", "gRPC listen address")
	callback := flag.String("callback", "", "Ticket Manager task event endpoint")
	ready := flag.String("ready-file", "", "file to receive the bound port")
	flag.Parse()
	listener, err := net.Listen("tcp", *address)
	if err != nil {
		log.Fatal(err)
	}
	server := grpc.NewServer()
	gatewayapi.RegisterGatewayServiceServer(server, &fakegateway.Server{CallbackURL: *callback, OnDelivery: func(err error) {
		if err != nil {
			log.Printf("task callback failed: %v", err)
		} else {
			log.Print("task callback delivered")
		}
	}})
	_, port, err := net.SplitHostPort(listener.Addr().String())
	if err != nil {
		log.Fatal(err)
	}
	if err = os.WriteFile(*ready, []byte(port), 0600); err != nil {
		log.Fatal(err)
	}
	if err = server.Serve(listener); err != nil {
		log.Fatal(err)
	}
}
