package kernel

import (
	"context"
	"cos.googlesource.com/cos/tools.git/src/pkg/utils"
	"fmt"
	"os"
	"path"
)

type FakeDownloader struct {
}

func (*FakeDownloader) DownloadKernelSrc(ctx context.Context, destDir string) error {
	var archive = map[string][]byte{
		"kernel-source": []byte("foo"),
	}
	if err := utils.CreateTarFile(path.Join(destDir, "kernel-src.tar.gz"), archive); err != nil {
		return fmt.Errorf("Failed to download kernel source: %v", err)
	}
	return nil
}

func (*FakeDownloader) DownloadToolchainEnv(ctx context.Context, destDir string) error {
	toolchainEnvStr := `
	CC=x86_64-cros-linux-gnu-clang
	CXX=x86_64-cros-linux-gnu-clang++
	`
	if err := os.WriteFile(path.Join(destDir, "toolchain_env"), []byte(toolchainEnvStr), 0644); err != nil {
		return fmt.Errorf("Failed to download toolchain env file: %v", err)
	}
	return nil
}

func (*FakeDownloader) DownloadToolchain(ctx context.Context, destDir string) error {
	var archive = map[string][]byte{
		"x86_64-cros-linux-gnu-clang": []byte("foo"),
	}
	if err := utils.CreateTarFile(path.Join(destDir, "toolchain.tar.xz"), archive); err != nil {
		return fmt.Errorf("Failed to download toolchain archive: %v", err)
	}
	return nil
}

func (*FakeDownloader) DownloadKernelHeaders(ctx context.Context, destDir string) error {
	var archive = map[string][]byte{
		"kernel-header": []byte("bar"),
	}
	if err := utils.CreateTarFile(path.Join(destDir, "kernel-headers.tgz"), archive); err != nil {
		return fmt.Errorf("Failed to download kernel headers: %v", err)
	}
	return nil
}

func (*FakeDownloader) DownloadArtifact(context.Context, string, string) error { return nil }

func (*FakeDownloader) GetArtifact(context.Context, string) ([]byte, error) { return nil, nil }

func (*FakeDownloader) ArtifactExists(context.Context, string) (bool, error) { return false, nil }

func (*FakeDownloader) ListArtifacts(ctx context.Context, prefix string) ([]string, error) {
	return nil, nil
}

func (*FakeDownloader) DownloadGenericNvidiaDriver(context.Context, string, string) (string, error) {
	return "", nil
}
