package utils

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"strings"

	"github.com/tidbcloud/tiinf/errs"
)

func PathExists(path string) bool {
	_, err := os.Stat(path)
	if err == nil {
		return true
	}
	if os.IsNotExist(err) {
		return false
	}
	return false
}

func WriteListToFile(fileName string, list []string) error {
	return WriteStringToFile(fileName, strings.Join(list, "\n"))
}
func WriteStringToFile(fileName string, content string) error {
	file, err := os.OpenFile(fileName, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
	if err != nil {
		fmt.Println("OpenFile failed", err)
		return err
	}
	defer file.Close() //nolint:errcheck
	write := bufio.NewWriter(file)
	write.WriteString(content) //nolint:errcheck
	return write.Flush()
}

func ReadFileToString(fileName string) (string, error) {
	fileData, err := ioutil.ReadFile(fileName)
	if err != nil {
		return "", err
	}
	return string(fileData), nil
}

func ReadFileToList(fileName string) (*[]string, error) {
	fi, err := os.Open(fileName)
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return nil, errs.NewBadRequest("no file found : "+fileName, nil)
	}
	defer fi.Close() //nolint:errcheck

	var resList []string
	br := bufio.NewReader(fi)
	for {
		a, _, c := br.ReadLine()
		if c == io.EOF {
			break
		}
		resList = append(resList, string(a))
	}
	return &resList, nil
}
