package main

import (
	"context"
	"encoding/json"
	"flag"
	"fmt"
	"io"

	"cloud.google.com/go/bigtable"
	"go.skia.org/infra/go/auth"
	"go.skia.org/infra/go/common"
	"go.skia.org/infra/go/sklog"
	"go.skia.org/infra/go/util"
	btdb "go.skia.org/infra/task_driver/go/db/bigtable"
)

var (
	// Flags.
	btInstance = flag.String("bigtable_instance", "", "BigTable instance to use.")
	btProject  = flag.String("bigtable_project", "", "GCE project to use for BigTable.")
	id         = flag.String("id", "", "ID of Task Driver whose messages should be retrieved.")
	output     = flag.String("output", "", "Optional, write results to this file.")
)

func main() {
	common.Init()
	ctx := context.Background()
	ts, err := auth.NewDefaultTokenSource(true, bigtable.Scope)
	if err != nil {
		sklog.Fatal(err)
	}
	db, err := btdb.NewBigTableDB(ctx, *btProject, *btInstance, ts)
	if err != nil {
		sklog.Fatal(err)
	}
	msgs, err := db.GetMessagesForTaskDriver(*id)
	if err != nil {
		sklog.Fatal(err)
	}
	b, err := json.MarshalIndent(msgs, "", "  ")
	if err != nil {
		sklog.Fatal(err)
	}
	if *output == "" {
		fmt.Println(string(b))
	} else {
		if err := util.WithWriteFile(*output, func(w io.Writer) error {
			_, err := w.Write(b)
			return err
		}); err != nil {
			sklog.Fatal(err)
		}
	}
}
