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::os::OsInfo;
use crate::dtos::storage::DiskInfo;
use crate::strategy::traits::HwStrategy;

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

pub struct WindowsStrategy {}

impl HwStrategy for WindowsStrategy {
	fn get_bios(&self) -> BiosInfo {
		bios::get_bios_info()
	}

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

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

	fn get_gpu(&self) -> Vec<GpuInfo> {
		gpu::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) -> 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(),
		}
	}
}
