package main

import (
	"context"
	"flag"
	"fmt"
	"github.com/go-pg/pg/v10"
	"golang_demo1/handlers"
	"net/http"
)

func main() {
	var opt, errDb = pg.ParseURL("postgres://db_user:pass@localhost:5432/repo?sslmode=disable")
	if errDb != nil {
		panic("Failed to parse url: " + errDb.Error())
	}
	var db = pg.Connect(opt)

	if db == nil {
		panic("failed to connect to the database")
	}

	defer func(db *pg.DB) {
		_ = db.Close()
	}(db)

	ctx := context.Background()

	if err := db.Ping(ctx); err != nil {
		panic("Failed to ping: " + err.Error())
	}

	portPtr := flag.Int("port", 8080, "port for webserver")
	flag.Parse()
	port := *portPtr

	fmt.Printf("Server is listening on port: %d", port)

	server := http.NewServeMux()
	server.HandleFunc("/status", handlers.StatusHandler)
	server.HandleFunc("/greeting", handlers.GreetingHandler)
	err := http.ListenAndServe(fmt.Sprintf("localhost:%d", port), server)

	if err != nil {
		fmt.Println("Error:", err)
		return
	}
}