package impl

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

	"veyron.io/veyron/veyron2/vlog"
)

// This file contains code in the impl package that we only want built for tests
// (it exposes public API methods that we don't want to normally expose).

var mockIsSetuid = flag.Bool("mocksetuid", false, "set flag to pretend to have a helper with setuid permissions")

func (c *callbackState) leaking() bool {
	c.Lock()
	defer c.Unlock()
	return len(c.channels) > 0
}

func (d *dispatcher) Leaking() bool {
	return d.internal.callback.leaking()
}

func init() {
	cleanupDir = func(dir, helper string) {
		if dir == "" {
			return
		}
		parentDir, base := filepath.Dir(dir), filepath.Base(dir)
		var renamed string
		if helper != "" {
			renamed = filepath.Join(parentDir, "helper_deleted_"+base)
		} else {
			renamed = filepath.Join(parentDir, "deleted_"+base)
		}
		if err := os.Rename(dir, renamed); err != nil {
			vlog.Errorf("Rename(%v, %v) failed: %v", dir, renamed, err)
		}
	}
	isSetuid = possiblyMockIsSetuid
}

func possiblyMockIsSetuid(fileStat os.FileInfo) bool {
	vlog.VI(2).Infof("Mock isSetuid is reporting: %v", *mockIsSetuid)
	return *mockIsSetuid
}

func WrapBaseCleanupDir(path, helper string) {
	baseCleanupDir(path, helper)
}
