<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">

  <?include $(sys.CURRENTDIR)\Common.wxi?>

  <Fragment>
    <DirectoryRef Id="INSTALLFOLDER" FileSource="$(var.BinDir)">
      <Component Id="powertoys_per_machine_comp" Bitness="always64">
        <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys">
          <RegistryValue Type="string" Name="InstallScope" Value="$(var.InstallScope)" />
        </RegistryKey>
      </Component>
      <?if $(var.PerUser) = "true" ?>
      <Component Id="powertoys_env_path_user" Bitness="always64">
        <!-- Anchor registry for component key path -->
        <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
          <RegistryValue Type="string" Name="powertoys_env_path_user" Value="" KeyPath="yes" />
        </RegistryKey>
        <!-- Append DSCModules folder to current user's PATH for DSC v3 usage -->
        <Environment Id="AddPowerToysToUserPath" Name="PATH" Action="set" Part="last" System="no" Value="[DSCModulesReferenceFolder]" />
      </Component>
      <?else?>
      <Component Id="powertoys_env_path_machine" Bitness="always64">
        <!-- Anchor registry for component key path -->
        <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
          <RegistryValue Type="string" Name="powertoys_env_path_machine" Value="" KeyPath="yes" />
        </RegistryKey>
        <!-- Append DSCModules folder to machine PATH for DSC v3 usage -->
        <Environment Id="AddPowerToysToMachinePath" Name="PATH" Action="set" Part="last" System="yes" Value="[DSCModulesReferenceFolder]" />
      </Component>
      <?endif?>
      <Component Id="powertoys_toast_clsid" Bitness="always64">
        <RemoveFolder Id="Remove_powertoys_toast_clsid" On="uninstall" />
        <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\CLSID\{DD5CACDA-7C2E-4997-A62A-04A597B58F76}">
          <RegistryValue Type="string" Value="PowerToys Toast Notifications Background Activator" />
          <RegistryValue Type="string" Key="LocalServer32" Value="[INSTALLFOLDER]PowerToys.exe -ToastActivated" />
          <RegistryValue Type="string" Key="LocalServer32" Name="ThreadingModel" Value="Apartment" />
        </RegistryKey>
      </Component>
      <Component Id="powertoys_exe" Guid="30261594-41A6-4509-AD09-FBC4E692F441" Bitness="always64">
        <File Id="PowerToys.exe" Name="PowerToys.exe" Checksum="yes" />
        <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys">
          <RegistryValue Type="string" Name="URL Protocol" Value="" KeyPath="yes" />
          <RegistryValue Type="string" Value="URL:PowerToys custom internal URI protocol" />
          <RegistryKey Key="DefaultIcon">
            <RegistryValue Type="string" Value="PowerToys.exe" />
          </RegistryKey>
          <RegistryKey Key="shell\open\command">
            <RegistryValue Type="string" Value="&quot;[INSTALLFOLDER]PowerToys.exe&quot; &quot;%1&quot;" />
          </RegistryKey>
        </RegistryKey>
      </Component>
      <Component Id="License_rtf" Guid="632C60DF-0DDC-4F14-8F2B-A28136CD9E63" Bitness="always64">
        <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
          <RegistryValue Type="string" Name="License_rtf" Value="" KeyPath="yes" />
        </RegistryKey>
        <File Source="$(var.RepoDir)\installer\License.rtf" Id="License.rtf" />
      </Component>
      <Component Id="Notice_md" Guid="1671B5F5-1260-42CF-83A8-9B3430DFF8C5" Bitness="always64">
        <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
          <RegistryValue Type="string" Name="Notice_md" Value="" KeyPath="yes" />
        </RegistryKey>
        <File Source="$(var.RepoDir)\Notice.md" Id="Notice.md" />
      </Component>
      <Directory Id="SvgsFolder" Name="svgs">
        <Component Id="svgs_icons" Guid="A9B7C5D3-E1F2-4A6B-8C9D-0E1F2A3B4C5D" Bitness="always64">
          <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
            <RegistryValue Type="string" Name="svgs_icons" Value="" KeyPath="yes" />
          </RegistryKey>
          <File Id="icon.ico" Source="$(var.BinDir)svgs\icon.ico" />
          <File Id="PowerToysWhite.ico" Source="$(var.BinDir)svgs\PowerToysWhite.ico" />
          <File Id="PowerToysDark.ico" Source="$(var.BinDir)svgs\PowerToysDark.ico" />
        </Component>
      </Directory>
    </DirectoryRef>

    <?if $(var.PerUser) = "true" ?>
    <!-- DSC module files for PerUser handled in InstallDSCModule custom action. -->
    <?else?>
    <StandardDirectory Id="ProgramFiles64Folder">
      <Directory Id="WindowsPowerShellFolder" Name="WindowsPowerShell">
        <Directory Id="PowerShellModulesFolder" Name="Modules">
          <Directory Id="PowerToysDscFolder" Name="Microsoft.PowerToys.Configure">
            <Directory Id="PowerToysDscVerFolder" Name="$(var.Version).0">
              <Component Id="PowerToysDSC" Guid="C52AECA0-DA73-49B8-BB49-31EF6640FF1F" Bitness="always64">
                <!-- Don't fail installation because of DSC. Files are marked as not vital. -->
                <File Vital="no" Source="$(var.RepoDir)\src\dsc\Microsoft.PowerToys.Configure\Generated\Microsoft.PowerToys.Configure\$(var.Version).0\Microsoft.PowerToys.Configure.psd1" Id="PTConf.psd1" />
                <File Vital="no" Source="$(var.RepoDir)\src\dsc\Microsoft.PowerToys.Configure\Generated\Microsoft.PowerToys.Configure\$(var.Version).0\Microsoft.PowerToys.Configure.psm1" Id="PTConf.psm1" />
              </Component>
            </Directory>
          </Directory>
        </Directory>
      </Directory>
    </StandardDirectory>
    <?endif?>

    <DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="PowerToysStartMenuShortcut">
        <Shortcut Id="ApplicationStartMenuShortcut" Name="PowerToys (Preview)" Description="PowerToys - Windows system utilities to maximize productivity" Icon="powertoys.exe" IconIndex="0" Target="[!PowerToys.exe]" WorkingDirectory="INSTALLFOLDER">
          <ShortcutProperty Key="System.AppUserModel.ID" Value="Microsoft.PowerToysWin32" />
        </Shortcut>
        <RemoveFolder Id="CleanUpStartMenuShortCut" Directory="ApplicationProgramsFolder" On="uninstall" />
        <!-- ApplicationStartMenuShortcut is implicitly installed in HKCU, so WIX won't allow changing this reg value to HKLM. -->
        <RegistryValue Root="HKCU" Key="Software\Microsoft\PowerToys" Name="installed" Type="integer" Value="1" KeyPath="yes" />
      </Component>
    </DirectoryRef>

    <StandardDirectory Id="DesktopFolder">
      <Component Id="DesktopShortcut" Condition="INSTALLDESKTOPSHORTCUT">
        
        <!-- DesktopShortcutId is implicitly installed in HKCU, so WIX won't allow changing this reg value to HKLM. -->
        <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name="desktopshorcutinstalled" Type="integer" Value="1" KeyPath="yes" />
        <Shortcut Id="DesktopShortcutId" Name="PowerToys (Preview)" Description="PowerToys - Windows system utilities to maximize productivity" Target="[!PowerToys.exe]" WorkingDirectory="INSTALLFOLDER" Icon="powertoys.exe" Directory="DesktopFolder" />
      </Component>
    </StandardDirectory>
  </Fragment>
  <Fragment>
    <ComponentGroup Id="CoreComponents">
      <Component Id="RemoveCoreFolder" Guid="9330BD69-2D12-4D98-B0C7-66C99564D619" Directory="INSTALLFOLDER">
        <RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
          <RegistryValue Type="string" Name="RemoveCoreFolder" Value="" KeyPath="yes" />
        </RegistryKey>
        <RemoveFolder Id="RemoveBaseApplicationsAssetsFolder" Directory="BaseApplicationsAssetsFolder" On="uninstall" />
        <RemoveFolder Id="RemoveWinUI3AppsInstallFolder" Directory="WinUI3AppsInstallFolder" On="uninstall" />
        <RemoveFolder Id="RemoveWinUI3AppsAssetsFolder" Directory="WinUI3AppsAssetsFolder" On="uninstall" />
        <RemoveFolder Id="RemoveSvgsFolder" Directory="SvgsFolder" On="uninstall" />
        <RemoveFolder Id="RemoveINSTALLFOLDER" Directory="INSTALLFOLDER" On="uninstall" />
      </Component>
      <ComponentRef Id="powertoys_exe" />
      <ComponentRef Id="PowerToysStartMenuShortcut" />
      <ComponentRef Id="powertoys_per_machine_comp" />
      <ComponentRef Id="powertoys_toast_clsid" />
      <ComponentRef Id="License_rtf" />
      <ComponentRef Id="Notice_md" />
      <ComponentRef Id="svgs_icons" />
      <ComponentRef Id="DesktopShortcut" />
      <?if $(var.PerUser) = "true" ?>
      <ComponentRef Id="powertoys_env_path_user" />
      <?else?>
      <ComponentRef Id="powertoys_env_path_machine" />
      <?endif?>
      <?if $(var.PerUser) = "false" ?>
      <ComponentRef Id="PowerToysDSC" />
      <?endif?>
    </ComponentGroup>
  </Fragment>
</Wix>
