/*
 * This file is part of the KubeVirt project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Copyright 2018 Red Hat, Inc.
 */

package versioninfo

import (
	"io/ioutil"
	"strings"

	"github.com/cobaugh/osrelease"
	goversion "github.com/hashicorp/go-version"
)

const (
	DefaultKernelVersion string = "/proc/version"
)

func OSRelease(conf *Config) (map[string]string, error) {
	if conf.OSRelease != "" {
		return osrelease.ReadFile(conf.OSRelease)
	}
	return osrelease.Read()
}

func KernelVersion(conf *Config) (*goversion.Version, error) {
	procVersion := DefaultKernelVersion
	if conf.KernVersion != "" {
		procVersion = conf.KernVersion
	}
	versionData, err := ioutil.ReadFile(procVersion)
	if err != nil {
		return nil, err
	}
	items := strings.Split(string(versionData), " ")
	// items[0] = "Linux"
	// items[1] = "version"
	return goversion.NewVersion(sanitizeVersion(items[2]))
}
