package tools

import (
	"os"
	"path/filepath"
)

type FileReadArgs struct {
	Path string `json:"path"`
}

func FileRead(args FileReadArgs) (string, error) {
	if b, err := os.ReadFile(args.Path); err != nil {
		return "", err
	} else {
		return string(b), nil
	}
}

type FileWriteArgs struct {
	Path     string `json:"path"`
	Contents string `json:"contents"`
}

type FileWriteResult struct {
}

func sanitizePath(p string) (string, error) {
	cwd, err := os.Getwd()
	if err != nil {
		return "", err
	}
	p = filepath.Join(cwd, p)
	p, err = filepath.Rel(p, cwd)
	if err != nil {
		return "", err
	}
	return p, nil
}

func FileWrite(args FileWriteArgs) (string, error) {
	p, err := sanitizePath(args.Path)
	if err != nil {
		return "", err
	}
	if os.MkdirAll(filepath.Dir(p), 0666) != nil {
		return "", nil
	}
	if err := os.WriteFile(args.Path, []byte(args.Contents), 0666); err != nil {
		return "error", err
	} else {
		return "done", nil
	}
}

type DirListArgs struct {
	Name string `json:"name"`
}

type DirEntry struct {
	Name  string `json:"name"`
	IsDir bool   `json:"is_dir"`
}

type DirListResult struct {
	Entries []DirEntry `json:"entries"`
}

func DirList(args DirListArgs) (DirListResult, error) {
	dir := "."
	if args.Name != "" {
		dir = args.Name
	}
	entries, err := os.ReadDir(dir)
	if err != nil {
		return DirListResult{}, err
	}
	var ret DirListResult
	for _, e := range entries {
		ret.Entries = append(ret.Entries, DirEntry{
			Name:  e.Name(),
			IsDir: e.IsDir(),
		})
	}
	return ret, nil
}
