package main

import (
	"context"
	"log"
	"os"
	"os/signal"
	"strings"
	"syscall"

	"email-monitor-app/internal/emailmonitor"
)

const version = "0.1.0"

func main() {
	log.SetFlags(log.LstdFlags | log.Lshortfile)
	log.SetOutput(os.Stdout)

	log.Println(strings.Repeat("=", 72))
	log.Printf("Email Monitoring Service - Version %s", version)
	log.Println(strings.Repeat("=", 72))

	cfg, err := emailmonitor.LoadConfigFromEnv()
	if err != nil {
		log.Fatalf("ERROR: Failed to load email monitor config: %v", err)
	}
	if cfg == nil || !cfg.Enabled {
		log.Println("WARN: Email monitor not enabled (missing env vars)")
		return
	}

	monitor, err := emailmonitor.NewMonitor(cfg)
	if err != nil {
		log.Fatalf("ERROR: Failed to initialize email monitor: %v", err)
	}

	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

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

	go monitor.Run(ctx)

	log.Println("Email monitor running")
	<-sigChan
	log.Println("Shutdown signal received")
	cancel()
}
