package cmdline

/*
import (
	"fmt"
	"io"
	"os"
	"path/filepath"
	"time"

	"github.com/jedib0t/go-pretty/v6/table"
	cdssdk "gitlink.org.cn/cloudream/jcs-pub/client/types"
	"gitlink.org.cn/cloudream/jcs-pub/common/pkgs/iterator"
)

// PackageListBucketPackages 列出指定存储桶中的所有包裹。
//
// 参数:
//
//	ctx - 命令上下文。
//	bucketID - 存储桶ID。
//
// 返回值:
//
//	error - 操作过程中发生的任何错误。
func PackageListBucketPackages(ctx CommandContext, bucketID cdssdk.BucketID) error {
	packages, err := ctx.Cmdline.Svc.BucketSvc().GetBucketPackages(bucketID)
	if err != nil {
		return err
	}

	fmt.Printf("Find %d packages in bucket %d for user %d:\n", len(packages), bucketID)

	tb := table.NewWriter()
	tb.AppendHeader(table.Row{"ID", "Name", "BucketID"})

	for _, obj := range packages {
		tb.AppendRow(table.Row{obj.PackageID, obj.Name, obj.BucketID})
	}

	fmt.Println(tb.Render())
	return nil
}

// PackageDownloadPackage 下载指定包裹的所有文件到本地目录。
//
// 参数:
//
//	ctx - 命令上下文。
//	packageID - 包裹ID。
//	outputDir - 输出目录路径。
//
// 返回值:
//
//	error - 操作过程中发生的任何错误。
func PackageDownloadPackage(ctx CommandContext, packageID cdssdk.PackageID, outputDir string) error {
	startTime := time.Now()
	defer func() {
		fmt.Printf("%v\n", time.Since(startTime).Seconds())
	}()

	err := os.MkdirAll(outputDir, os.ModePerm)
	if err != nil {
		return fmt.Errorf("create output directory %s failed, err: %w", outputDir, err)
	}

	// 初始化文件下载迭代器
	objIter, err := ctx.Cmdline.Svc.PackageSvc().DownloadPackage(packageID)
	if err != nil {
		return fmt.Errorf("download object failed, err: %w", err)
	}
	defer objIter.Close()

	madeDirs := make(map[string]bool)

	for {
		objInfo, err := objIter.MoveNext()
		if err == iterator.ErrNoMoreItem {
			break
		}
		if err != nil {
			return err
		}

		err = func() error {
			defer objInfo.File.Close()

			fullPath := filepath.Join(outputDir, objInfo.Object.Path)

			dirPath := filepath.Dir(fullPath)
			if !madeDirs[dirPath] {
				if err := os.MkdirAll(dirPath, 0755); err != nil {
					return fmt.Errorf("creating object dir: %w", err)
				}
				madeDirs[dirPath] = true
			}

			outputFile, err := os.Create(fullPath)
			if err != nil {
				return fmt.Errorf("creating object file: %w", err)
			}
			defer outputFile.Close()

			_, err = io.Copy(outputFile, objInfo.File)
			if err != nil {
				return fmt.Errorf("copy object data to local file failed, err: %w", err)
			}

			return nil
		}()
		if err != nil {
			return err
		}
	}

	return nil
}

// PackageCreatePackage 在指定存储桶中创建新包裹。
//
// 参数:
//
//	ctx - 命令上下文。
//	bucketID - 存储桶ID。
//	name - 包裹名称。
//
// 返回值:
//
//	error - 操作过程中发生的任何错误。
func PackageCreatePackage(ctx CommandContext, bucketID cdssdk.BucketID, name string) error {
	pkgID, err := ctx.Cmdline.Svc.PackageSvc().Create(bucketID, name)
	if err != nil {
		return err
	}

	fmt.Printf("%v\n", pkgID)
	return nil
}

// PackageDeletePackage 删除指定的包裹。
//
// 参数:
//
//	ctx - 命令上下文。
//	packageID - 包裹ID。
//
// 返回值:
//
//	error - 操作过程中发生的任何错误。
func PackageDeletePackage(ctx CommandContext, packageID cdssdk.PackageID) error {
	err := ctx.Cmdline.Svc.PackageSvc().DeletePackage(packageID)
	if err != nil {
		return fmt.Errorf("delete package %d failed, err: %w", packageID, err)
	}
	return nil
}

// PackageGetCachedStorages 获取指定包裹的缓存节点信息。
//
// 参数:
//
//	ctx - 命令上下文。
//	packageID - 包裹ID。
//
// 返回值:
//
//	error - 操作过程中发生的任何错误。
func PackageGetCachedStorages(ctx CommandContext, packageID cdssdk.PackageID) error {
	resp, err := ctx.Cmdline.Svc.PackageSvc().GetCachedStorages(packageID)
	fmt.Printf("resp: %v\n", resp)
	if err != nil {
		return fmt.Errorf("get package %d cached storages failed, err: %w", packageID, err)
	}
	return nil
}

// 初始化命令行工具的包相关命令。
func init() {
	commands.MustAdd(PackageListBucketPackages, "pkg", "ls")

	commands.MustAdd(PackageDownloadPackage, "pkg", "get")

	commands.MustAdd(PackageCreatePackage, "pkg", "new")

	commands.MustAdd(PackageDeletePackage, "pkg", "delete")

	// 查询package缓存到哪些节点
	commands.MustAdd(PackageGetCachedStorages, "pkg", "cached")
}
*/
