// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: AGPL-3.0

package main

import (
	"flag"
	"fmt"
	"os"

	"git.arvados.org/arvados.git/lib/config"
	"github.com/coreos/go-systemd/daemon"
	"github.com/ghodss/yaml"
	log "github.com/sirupsen/logrus"
)

var version = "dev"

func main() {
	logger := log.New()
	log.SetFormatter(&log.JSONFormatter{
		TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
	})

	flags := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
	loader := config.NewLoader(os.Stdin, logger)
	loader.SetupFlags(flags)

	dumpConfig := flags.Bool("dump-config", false, "write current configuration to stdout and exit (useful for migrating from command line flags to config file)")
	getVersion := flags.Bool("version", false, "print version information and exit.")

	args := loader.MungeLegacyConfigArgs(logger, os.Args[1:], "-legacy-git-httpd-config")
	flags.Parse(args)

	if *getVersion {
		fmt.Printf("arv-git-httpd %s\n", version)
		return
	}

	cfg, err := loader.Load()
	if err != nil {
		log.Fatal(err)
	}

	cluster, err := cfg.GetCluster("")
	if err != nil {
		log.Fatal(err)
	}

	if *dumpConfig {
		out, err := yaml.Marshal(cfg)
		if err != nil {
			log.Fatal(err)
		}
		_, err = os.Stdout.Write(out)
		if err != nil {
			log.Fatal(err)
		}
		return
	}

	srv := &server{cluster: cluster}
	if err := srv.Start(); err != nil {
		log.Fatal(err)
	}
	if _, err := daemon.SdNotify(false, "READY=1"); err != nil {
		log.Printf("Error notifying init daemon: %v", err)
	}
	log.Printf("arv-git-httpd %s started", version)
	log.Println("Listening at", srv.Addr)
	log.Println("Repository root", cluster.Git.Repositories)
	if err := srv.Wait(); err != nil {
		log.Fatal(err)
	}
}