// Knowledge base of common Windows installer technologies and their silent
// install/uninstall command lines. Command templates use placeholders:
//   {file}        the installer file name/path
//   {productCode} the MSI product code (MSI/MSP)
//   {app}         the installed app folder (operator fills in)
//   {packageName} the MSIX/AppX package name
// Confidence reflects how reliably the technology can be inferred from a file
// name alone; binary signature sniffing (Phase 5) raises it.

export const INSTALLER_TECHNOLOGIES = [
  {
    id: 'msi',
    label: 'Windows Installer (MSI)',
    extensions: ['.msi'],
    install: 'msiexec.exe /i "{file}" /qn /norestart',
    uninstall: 'msiexec.exe /x "{productCode}" /qn /norestart',
    psadtInstall: "Start-ADTMsiProcess -Action Install -FilePath '{file}'",
    psadtUninstall: "Start-ADTMsiProcess -Action Uninstall -ProductCode '{productCode}'",
    detection: 'msi',
    notes: 'MSI is silent with /qn. Use the product code for uninstall and detection.'
  },
  {
    id: 'msp',
    label: 'Windows Installer Patch (MSP)',
    extensions: ['.msp'],
    install: 'msiexec.exe /p "{file}" /qn /norestart',
    uninstall: '',
    psadtInstall: "Start-ADTMsiProcess -Action Patch -FilePath '{file}'",
    detection: 'msi',
    notes: 'MSP applies a patch to an installed MSI.'
  },
  {
    id: 'inno',
    label: 'Inno Setup',
    extensions: ['.exe'],
    hints: ['inno'],
    install: '"{file}" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-',
    uninstall: '"%ProgramFiles%\\{app}\\unins000.exe" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART',
    psadtInstall: "Start-ADTProcess -FilePath '{file}' -ArgumentList '/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-'",
    detection: 'registry-uninstall',
    notes: 'Inno Setup uses /VERYSILENT; the uninstaller is unins000.exe in the install folder.'
  },
  {
    id: 'nsis',
    label: 'NSIS (Nullsoft)',
    extensions: ['.exe'],
    hints: ['nsis'],
    install: '"{file}" /S',
    uninstall: '"%ProgramFiles%\\{app}\\uninstall.exe" /S',
    psadtInstall: "Start-ADTProcess -FilePath '{file}' -ArgumentList '/S'",
    detection: 'registry-uninstall',
    notes: 'NSIS uses an uppercase /S for silent install.'
  },
  {
    id: 'installshield',
    label: 'InstallShield',
    extensions: ['.exe'],
    hints: ['installshield'],
    install: '"{file}" /s /v"/qn"',
    uninstall: '"{file}" /s /x /v"/qn"',
    psadtInstall: "Start-ADTProcess -FilePath '{file}' -ArgumentList '/s /v\"/qn\"'",
    detection: 'registry-uninstall',
    notes: 'InstallShield; older versions may require a recorded response file (.iss).'
  },
  {
    id: 'wix-burn',
    label: 'WiX Burn bundle',
    extensions: ['.exe'],
    hints: ['bundle', 'burn'],
    install: '"{file}" /quiet /norestart',
    uninstall: '"{file}" /uninstall /quiet /norestart',
    psadtInstall: "Start-ADTProcess -FilePath '{file}' -ArgumentList '/quiet /norestart'",
    detection: 'registry-uninstall',
    notes: 'WiX Burn bootstrapper uses /quiet /norestart.'
  },
  {
    id: 'squirrel',
    label: 'Squirrel (Electron)',
    extensions: ['.exe'],
    hints: ['squirrel'],
    install: '"{file}" --silent',
    uninstall: '"{file}" --uninstall --silent',
    psadtInstall: "Start-ADTProcess -FilePath '{file}' -ArgumentList '--silent'",
    detection: 'registry-uninstall',
    notes: 'Squirrel installers (many Electron apps) use --silent.'
  },
  {
    id: 'msix',
    label: 'MSIX / AppX',
    extensions: ['.msix', '.msixbundle', '.appx', '.appxbundle'],
    install: 'Add-AppxProvisionedPackage -Online -PackagePath "{file}" -SkipLicense',
    uninstall: 'Remove-AppxProvisionedPackage -Online -PackageName "{packageName}"',
    psadtInstall: "Add-AppxProvisionedPackage -Online -PackagePath '{file}' -SkipLicense",
    detection: 'appx',
    notes: 'MSIX/AppX provisioned package; detection via Get-AppxPackage.'
  },
  {
    id: 'exe',
    label: 'Generic EXE',
    extensions: ['.exe'],
    install: '"{file}" /S',
    uninstall: '',
    psadtInstall: "Start-ADTProcess -FilePath '{file}' -ArgumentList '/S'",
    detection: 'registry-uninstall',
    notes: 'Unknown EXE installer; confirm the silent switch with the vendor. Common switches: /S, /silent, /quiet, /VERYSILENT.'
  }
];
