package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
    "time"

    "github.com/getsentry/sentry-go"
)

func main() {
    // Check that exactly one argument is passed (file path)
    if len(os.Args) != 2 {
        fmt.Fprintf(os.Stderr, "Usage: %s <path to log file>\n", os.Args[0])
        os.Exit(1)
    }

    filePath := os.Args[1]

    // Open the file
    file, err := os.Open(filePath)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Error opening file: %s\n", err)
        os.Exit(1)
    }
    defer file.Close()

    // Read file contents into a string
    scanner := bufio.NewScanner(file)
    var content strings.Builder
    for scanner.Scan() {
        content.WriteString(scanner.Text())
        content.WriteString("\n")  // Preserve line breaks
    }

    if err := scanner.Err(); err != nil {
        fmt.Fprintf(os.Stderr, "Error reading file: %s\n", err)
        os.Exit(1)
    }

    logMessage := content.String()

    dsn := os.Getenv("SENTRY_DSN")
    if dsn == "" {
        fmt.Fprintf(os.Stderr, "Error: SENTRY_DSN environment variable is not set.\n")
        os.Exit(1)
    }

    // Initialize Sentry with the DSN
    err = sentry.Init(sentry.ClientOptions{
        Dsn: dsn,
    })
    if err != nil {
        fmt.Fprintf(os.Stderr, "Error initializing Sentry: %s\n", err)
        os.Exit(1)
    }

    // Defer a function to flush Sentry's buffer
    defer func() {
        success := sentry.Flush(5 * time.Second)
        if !success {
            fmt.Fprintf(os.Stderr, "Failed to flush Sentry buffer within the expected time.\n")
        } else {
            fmt.Println("Sentry buffer flushed successfully.")
        }
    }()

    // Capture the message and output the event ID
    eventID := sentry.CaptureMessage(logMessage)
    if eventID != nil {
        fmt.Printf("Sent message to Sentry with event ID: %s\n", *eventID)
    } else {
        fmt.Fprintf(os.Stderr, "Failed to send message to Sentry.\n")
    }
}

