package main

import (
	"flag"
	"fmt"
	"log/slog"
	"net/http"
	"os"
	"os/signal"
	"syscall"
)

var (
	apiPort    = flag.String("port", "8092", "api port")
	apiKey     = flag.String("key", "testKey", "api key")
	dbHost     = flag.String("dbhost", "localhost", "database host")
	dbPort     = flag.String("dbport", "5432", "database port")
	dbName     = flag.String("dbname", "planner", "database name")
	dbUser     = flag.String("dbuser", "test", "database user")
	dbPassword = flag.String("dbpassword", "test", "database password")
)

func main() {
	flag.Parse()

	repo, err := NewPostgres(*dbHost, *dbPort, *dbName, *dbUser, *dbPassword)
	if err != nil {
		fmt.Printf("could not open postgres db: %s", err.Error())
		os.Exit(1)
	}

	logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
	logger.Info("configuration", "configuration", map[string]string{
		"port":   *apiPort,
		"dbHost": *dbHost,
		"dbPort": *dbPort,
		"dbName": *dbName,
		"dbUser": *dbUser,
	})

	srv := NewServer(repo, *apiKey, logger)
	go http.ListenAndServe(fmt.Sprintf(":%s", *apiPort), srv)

	logger.Info("service started")

	c := make(chan os.Signal, 1)
	signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
	<-c

	logger.Info("service stopped")
}