// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package impl

import (
	"io/ioutil"
	"os"
	"path/filepath"

	"v.io/x/lib/vlog"
)

const defaultRootPrefix = "veyron_binary_repository"

// SetupRootDir sets up the root directory if it doesn't already exist. If an
// empty string is used as root, create a new temporary directory.
func SetupRootDir(root string) (string, error) {
	if root == "" {
		var err error
		if root, err = ioutil.TempDir("", defaultRootPrefix); err != nil {
			vlog.Errorf("TempDir() failed: %v\n", err)
			return "", err
		}
		path, perm := filepath.Join(root, VersionFile), os.FileMode(0600)
		if err := ioutil.WriteFile(path, []byte(Version), perm); err != nil {
			vlog.Errorf("WriteFile(%v, %v, %v) failed: %v", path, Version, perm, err)
			return "", err
		}
		return root, nil
	}

	_, err := os.Stat(root)
	switch {
	case err == nil:
	case os.IsNotExist(err):
		perm := os.FileMode(0700)
		if err := os.MkdirAll(root, perm); err != nil {
			vlog.Errorf("MkdirAll(%v, %v) failed: %v", root, perm, err)
			return "", err
		}
		path, perm := filepath.Join(root, VersionFile), os.FileMode(0600)
		if err := ioutil.WriteFile(path, []byte(Version), perm); err != nil {
			vlog.Errorf("WriteFile(%v, %v, %v) failed: %v", path, Version, perm, err)
			return "", err
		}
	default:
		vlog.Errorf("Stat(%v) failed: %v", root, err)
		return "", err
	}
	return root, nil
}
