package container

import (
	"path"
	"path/filepath"
	"sort"

	"github.com/hpcng/warewulf/internal/pkg/util"
	"github.com/hpcng/warewulf/internal/pkg/wwlog"
)

var (
	kernelNames = []string{
		`vmlinux`,
		`vmlinuz`,
		`vmlinuz.gz`,
	}
	modulePath = "/lib/modules/"
)

func KernelFind(container string) string {
	wwlog.Printf(wwlog.DEBUG, "Finding kernel\n")
	container_path := RootFsDir(container)
	if container_path == "" {
		return ""
	}

	for _, kname := range kernelNames {
		wwlog.Printf(wwlog.DEBUG, "Checking for kernel name within module path: %s\n", kname)
		kernelPaths, err := filepath.Glob(path.Join(container_path, modulePath, "/*/", kname))
		if err != nil {
			return ""
		}

		sort.Slice(kernelPaths, func(i, j int) bool {
			return kernelPaths[i] > kernelPaths[j]
		})

		for _, kernelPath := range kernelPaths {
			wwlog.Printf(wwlog.DEBUG, "Checking for kernel path: %s\n", kernelPath)
			if util.IsFile(kernelPath) {
				return kernelPath
			}
		}
	}

	return ""
}

func KernelVersion(container string) string {
	wwlog.Printf(wwlog.DEBUG, "Finding kernel version inside container: %s\n", container)
	kernel := KernelFind(container)
	if kernel == "" {
		return ""
	}

	return path.Base(path.Dir(kernel))
}
