// Copyright (C) 2014 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.

package main

import (
	"flag"
	"fmt"
	"log"
	"os"
	"path/filepath"

	"github.com/syncthing/syncthing/lib/db/backend"
)

func main() {
	var mode string
	log.SetFlags(0)
	log.SetOutput(os.Stdout)

	flag.StringVar(&mode, "mode", "dump", "Mode of operation: dump, dumpsize, idxck")

	flag.Parse()

	path := flag.Arg(0)
	if path == "" {
		path = filepath.Join(defaultConfigDir(), "index-v0.14.0.db")
	}

	var ldb backend.Backend
	var err error
	if looksLikeBadger(path) {
		ldb, err = backend.OpenBadger(path)
	} else {
		ldb, err = backend.OpenLevelDBRO(path)
	}
	if err != nil {
		log.Fatal(err)
	}

	switch mode {
	case "dump":
		dump(ldb)
	case "dumpsize":
		dumpsize(ldb)
	case "idxck":
		if !idxck(ldb) {
			os.Exit(1)
		}
	case "account":
		account(ldb)
	default:
		fmt.Println("Unknown mode")
	}
}

func looksLikeBadger(path string) bool {
	_, err := os.Stat(filepath.Join(path, "KEYREGISTRY"))
	return err == nil
}
