// Author: NiuJiuRu
// Email: niujiuru@qq.com

package baseapp

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
)

// 当前可执行文件的路径
var EXEC_DIR string

// 当前可执行文件的名字
var EXEC_FILENAME string

// 配置文件路径
var CFG_DIR string

// 程序日志目录
var LOG_DIR string

// 记录运行状态
var RUN_DIR string

// 变动缓存文件
var VAR_DIR string

// 相机图片目录
var IMG_DIR string

func InitPath() {
	file, err := exec.LookPath(os.Args[0])
	if err != nil {
		fmt.Printf("An error occurred while calling the exec.LookPath() function: %v\n", err)
		os.Exit(1)
	}

	path, err := filepath.Abs(file)
	if err != nil {
		fmt.Printf("An error occurred while calling the filepath.Abs() function: %v\n", err)
		os.Exit(1)
	}

	EXEC_DIR = filepath.Dir(path)
	EXEC_FILENAME = filepath.Base(path)

	CFG_DIR = filepath.Join(EXEC_DIR, "config")
	LOG_DIR = filepath.Join(EXEC_DIR, "log")
	RUN_DIR = filepath.Join(EXEC_DIR, "status")
	VAR_DIR = filepath.Join(EXEC_DIR, "var")
	IMG_DIR = filepath.Join(EXEC_DIR, "cam_img")

	for _, dir := range []string{CFG_DIR, LOG_DIR, RUN_DIR, VAR_DIR, IMG_DIR} {
		if err := ExistsDir(dir, true); err != nil {
			fmt.Printf("Failed to create the %s directory: %v\n", dir, err)
			os.Exit(1)
		}
	}
}

func ExistsDir(dir string, create bool) error {
	var err error
	_, err = os.Stat(dir)
	if os.IsNotExist(err) && create {
		err = os.MkdirAll(dir, os.ModePerm)
	}
	return err
}
