package utils

import (
	"context"
	"github.com/mholt/archiver/v4"
	"os"
	"path/filepath"
	"strings"
)

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

func TarXz(dst string, src string) error {
	src = filepath.Clean(src)
	dst = filepath.Clean(dst)
	if !strings.HasSuffix(src, string(os.PathSeparator)) {
		src += string(os.PathSeparator)
	}
	files, err := archiver.FilesFromDisk(nil, map[string]string{
		src: "",
	})
	if err != nil {
		return err
	}

	out, err := os.Create(dst)
	if err != nil {
		return err
	}
	defer out.Close()
	var compression archiver.Compression
	if strings.HasSuffix(dst, "gz") {
		compression = archiver.Gz{}
	} else if strings.HasSuffix(dst, "xz") {
		compression = archiver.Xz{}
	} else {
		compression = archiver.Gz{}
	}
	format := archiver.CompressedArchive{
		Compression: compression,
		Archival:    archiver.Tar{},
	}
	err = format.Archive(context.Background(), out, files)
	if err != nil {
		return err
	}
	return nil
}