package daemon

import (
	"fmt"
	"os"
	"path/filepath"
	"strings"
	"time"

	"github.com/davecgh/go-spew/spew"
	"github.com/pkg/errors"
)

const dataStructuresLogNameTemplate = "daemon-data-%s.log"

// dumpDaemon appends the daemon datastructures into file in dir and returns full path
// to that file.
func (d *Daemon) dumpDaemon(dir string) (string, error) {
	// Ensure we recover from a panic as we are doing this without any locking
	defer func() {
		recover()
	}()

	path := filepath.Join(dir, fmt.Sprintf(dataStructuresLogNameTemplate, strings.Replace(time.Now().Format(time.RFC3339), ":", "", -1)))
	f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0666)
	if err != nil {
		return "", errors.Wrap(err, "failed to open file to write the daemon datastructure dump")
	}
	defer f.Close()
	spew.Fdump(f, d) // Does not return an error
	f.Sync()
	return path, nil
}