package rosa

import (
	"hakurei.app/fhs"
	"hakurei.app/internal/pkg"
)

func init() {
	artifactsM[EarlyInit] = Metadata{
		Name:        "earlyinit",
		Description: "Rosa OS initramfs init program",

		f: func(t Toolchain) (pkg.Artifact, string) {
			return t.newHakurei("-early-init", `
mkdir -p /work/system/libexec/hakurei/

echo '# Building earlyinit.'
go build -trimpath -v -o /work/system/libexec/hakurei -ldflags="-s -w
	-buildid=
	-linkmode external
	-extldflags=-static
	-X hakurei.app/internal/info.buildVersion=${HAKUREI_VERSION}
" ./cmd/earlyinit
echo
`, false), Unversioned
		},
	}
}

func (t Toolchain) newImageSystem() (pkg.Artifact, string) {
	return t.New("system.img", TNoToolchain, t.AppendPresets(nil,
		SquashfsTools,
	), nil, nil, `
mksquashfs /mnt/system /work/system.img
`, pkg.Path(fhs.AbsRoot.Append("mnt"), false, t.AppendPresets(nil,
		Musl,
		Mksh,
		Toybox,

		Kmod,
		Kernel,
		Firmware,
	)...)), Unversioned
}
func init() {
	artifactsM[ImageSystem] = Metadata{
		Name:        "system-image",
		Description: "Rosa OS system image",

		f: Toolchain.newImageSystem,
	}
}

func (t Toolchain) newImageInitramfs() (pkg.Artifact, string) {
	return t.New("initramfs", TNoToolchain, t.AppendPresets(nil,
		Zstd,
		EarlyInit,
		GenInitCPIO,
	), nil, nil, `
gen_init_cpio -t 4294967295 -c /usr/src/initramfs | zstd > /work/initramfs.zst
`, pkg.Path(AbsUsrSrc.Append("initramfs"), false, pkg.NewFile("initramfs", []byte(`
dir /dev 0755 0 0
nod /dev/null 0666 0 0 c 1 3
nod /dev/console 0600 0 0 c 5 1
file /init /system/libexec/hakurei/earlyinit 0555 0 0
`)))), Unversioned
}
func init() {
	artifactsM[ImageInitramfs] = Metadata{
		Name:        "initramfs-image",
		Description: "Rosa OS initramfs image",

		f: Toolchain.newImageInitramfs,
	}
}
