package main

import (
    "encoding/base64"
    "encoding/json"
    "fmt"
    "net/url"
    "os/exec"
    "strings"
)

type Scan struct {
    CPU         string `json:"cpu"`
    GPU         string `json:"gpu"`
    RAM         string `json:"ram"`
    Motherboard string `json:"motherboard"`
}

func ps(script string) string {
    out, err := exec.Command("powershell.exe", "-NoLogo", "-NoProfile", "-NonInteractive", "-Command", script).CombinedOutput()
    if err != nil {
        return ""
    }
    return strings.TrimSpace(string(out))
}

func main() {
    fmt.Println("RigValue Scanner BETA")
    fmt.Println("Reads only: CPU, GPU, installed RAM and motherboard model.")
    fmt.Println("No administrator rights required. No personal files are read.")
    fmt.Println()

    cpu := ps("(Get-CimInstance Win32_Processor | Select-Object -First 1 -ExpandProperty Name)")
    gpu := ps("(Get-CimInstance Win32_VideoController | Where-Object {$_.Name -notmatch 'Microsoft|Remote|Basic'} | Select-Object -First 1 -ExpandProperty Name)")
    ram := ps("$m=Get-CimInstance Win32_PhysicalMemory; $gb=[math]::Round((($m|Measure-Object Capacity -Sum).Sum/1GB)); $sp=($m|Measure-Object Speed -Maximum).Maximum; \"$gb GB RAM $sp MHz\"")
    mb := ps("$b=Get-CimInstance Win32_BaseBoard|Select-Object -First 1; (($b.Manufacturer+' '+$b.Product).Trim())")

    scan := Scan{CPU: cpu, GPU: gpu, RAM: ram, Motherboard: mb}
    raw, _ := json.Marshal(scan)
    encoded := base64.RawURLEncoding.EncodeToString(raw)
    target := "https://rigvalue.mvisualtools.workers.dev/?scan=" + url.QueryEscape(encoded)

    fmt.Println("Detected hardware:")
    fmt.Println("CPU:", cpu)
    fmt.Println("GPU:", gpu)
    fmt.Println("RAM:", ram)
    fmt.Println("Motherboard:", mb)
    fmt.Println()
    fmt.Println("Opening RigValue in your default browser...")

    _ = exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", target).Start()
}
