mod bios;
mod cpu;
mod display;
mod gpu;
mod memory;
mod motherboard;
mod os;
mod storage;

use crate::dtos::bios::BiosInfo;
use crate::dtos::cpu::CpuInfo;
use crate::dtos::display::DisplayInfo;
use crate::dtos::gpu::GpuInfo;
use crate::dtos::HardWareInfo;
use crate::dtos::memory::MemoryInfo;
use crate::dtos::motherboard::MotherboardInfo;
use crate::dtos::storage::DiskInfo;
use crate::dtos::HardWareInfo;
use crate::strategy::linux::bios::get_bios_info;
use crate::strategy::linux::cpu::get_cpu_info;
use crate::strategy::linux::display::get_display_info;
use crate::strategy::linux::gpu::get_gpu_info;
use crate::strategy::traits::HwStrategy;

pub struct LinuxStrategy {

}

impl HwStrategy for LinuxStrategy {
    fn get_bios(&self) -> BiosInfo {
        get_bios_info()
    }

    fn get_cpu(&self) -> CpuInfo {
		get_cpu_info()
    }

	 fn get_display(&self) -> Vec<DisplayInfo> {
		get_display_info()
	 }

	 fn get_gpu(&self) -> Vec<GpuInfo> {
		get_gpu_info()
	 }

	 fn get_memory(&self) -> Vec<MemoryInfo> {
		memory::get_memory_info()
	}

	fn get_motherboard(&self) -> MotherboardInfo {
		 motherboard::get_motherboard_info()
	}

	fn get_os(&self) -> crate::dtos::os::OsInfo {
		os::get_os_info()
	}

	fn get_storage(&self) -> Vec<DiskInfo> {
		storage::get_storage_info()
	}

	fn get_hw(&self) -> HardWareInfo {
		HardWareInfo {
			os: self.get_os(),
			bios: self.get_bios(),
			motherboard: self.get_motherboard(),
			cpu: self.get_cpu(),
			memory: self.get_memory(),
			storage: self.get_storage(),
			gpu: self.get_gpu(),
			display: self.get_display(),
		}
	}
}
