package provision import ( "fmt" "strings" "zlh-agent/internal/state" "zlh-agent/internal/provision/minecraft" "zlh-agent/internal/provision/steam" ) /* ProvisionAll — unified entrypoint for MC + Steam. IMPORTANT: - This function ONLY performs installation. - Validation/verification happens in ensureProvisioned(). */ func ProvisionAll(cfg state.Config) error { game := strings.ToLower(cfg.Game) variant := strings.ToLower(cfg.Variant) /* --------------------------------------------------------- MINECRAFT --------------------------------------------------------- */ if game == "minecraft" { // 1. Install Java (runtime) if err := InstallJava(cfg); err != nil { return fmt.Errorf("java install failed: %w", err) } // 2. Game variant install switch variant { case "vanilla", "paper", "purpur", "fabric", "quilt": if err := minecraft.InstallMinecraftVanilla(cfg); err != nil { return fmt.Errorf("minecraft vanilla install failed: %w", err) } case "forge": if err := minecraft.InstallMinecraftForge(cfg); err != nil { return fmt.Errorf("forge install failed: %w", err) } case "neoforge": if err := minecraft.InstallMinecraftNeoForge(cfg); err != nil { return fmt.Errorf("neoforge install failed: %w", err) } default: return fmt.Errorf("unsupported minecraft variant: %s", variant) } // 3. Config files generated AFTER variant installer if err := WriteEula(cfg); err != nil { return err } if err := WriteServerProperties(cfg); err != nil { return err } if err := WriteStartScript(cfg); err != nil { return err } // DO NOT VERIFY HERE. // Verification happens in ensureProvisioned(), AFTER install. return nil } /* --------------------------------------------------------- STEAM GAMES --------------------------------------------------------- */ if IsSteamGame(game) { // 1. SteamCMD install if err := steam.EnsureSteamCMD(); err != nil { return fmt.Errorf("steamcmd install failed: %w", err) } // 2. Install game-specific content switch game { case "valheim": if err := steam.InstallValheim(cfg); err != nil { return err } case "rust": if err := steam.InstallRust(cfg); err != nil { return err } case "terraria": if err := steam.InstallTerraria(cfg); err != nil { return err } case "projectzomboid": if err := steam.InstallProjectZomboid(cfg); err != nil { return err } default: return fmt.Errorf("unsupported steam game: %s", game) } // 3. Start script if err := WriteStartScript(cfg); err != nil { return err } // DO NOT VERIFY HERE (Steam verification TBD later) return nil } /* --------------------------------------------------------- UNKNOWN GAME TYPE --------------------------------------------------------- */ return fmt.Errorf("unsupported game type: %s", game) }