<Project Sdk="Microsoft.NET.Sdk">

	<!-- ===================================================================== -->
	<!-- 1) APLIKACJA / PLATFORMY / WINUI (UNPACKAGED)                           -->
	<!-- ===================================================================== -->
	<PropertyGroup>
		<!-- Typ aplikacji: Windows GUI (bez konsoli). -->
		<OutputType>WinExe</OutputType>

		<!-- Docelowy framework + Windows SDK (WinUI3 wymaga windows TF). -->
		<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>

		<!-- Minimalna wersja Windows, na której aplikacja może się uruchomić. -->
		<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>

		<!-- Włącza WinUI 3 dla projektu (Windows App SDK). -->
		<UseWinUI>true</UseWinUI>

		<!-- Tryb UNPACKAGED: brak MSIX (uruchamiasz EXE z folderu). -->
		<WindowsPackageType>None</WindowsPackageType>

		<!-- Wyłącza tooling MSIX/Appx (żeby VS nie mieszał w paczkowaniu). -->
		<EnableMsixTooling>false</EnableMsixTooling>

		<!-- Wyłącza podpisywanie paczek (i tak nie generujemy MSIX). -->
		<AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>

		<!-- Windows App SDK self-contained:
         runtime Windows App SDK dołączony do publikacji (działa na PC bez instalacji runtime). -->
		<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>

		<!-- Generuje plik .pri (zasoby XAML/WinUI); często wymagane dla trybu unpackaged. -->
		<GenerateProjectPriFile>true</GenerateProjectPriFile>

		<!-- Ogranicza języki zasobów satelitarnych (mniej folderów typu pl-PL). -->
		<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
		<NeutralLanguage>en</NeutralLanguage>

		<!-- Generowanie XML docs (dla aplikacji zwykle zbędne). -->
		<GenerateDocumentationFile>false</GenerateDocumentationFile>

		<!-- Nullable reference types (lepsza jakość i bezpieczeństwo kodu). -->
		<Nullable>enable</Nullable>

		<!-- Dostępne platformy budowania w Visual Studio. -->
		<Platforms>x64</Platforms>
	</PropertyGroup>

	<!-- ===================================================================== -->
	<!-- 2) TOŻSAMOŚĆ PRODUKTU / METADANE PLIKU EXE (Details -> Properties)      -->
	<!-- ===================================================================== -->
	<PropertyGroup>
		<!-- Nazwa assembly (i zwykle nazwa EXE). -->
		<AssemblyName>Sonex</AssemblyName>

		<!-- Główna przestrzeń nazw projektu. -->
		<RootNamespace>Sonex</RootNamespace>

		<!-- Ikona EXE aplikacji. -->
		<ApplicationIcon>AppIcon.ico</ApplicationIcon>

		<!-- Manifest aplikacji (UAC, DPI, kompatybilność itp.). -->
		<ApplicationManifest>app.manifest</ApplicationManifest>

		<!-- Metadane wyświetlane w właściwościach pliku (Details). -->
		<Product>Sonex</Product>
		<Title>Sonex - developed by Samuel Jendryke</Title>
		<Description>Designed to support</Description>

		<!-- Dla części narzędzi Windows/VS: -->
		<AssemblyTitle>Sonex - developed by Samuel Jendryke</AssemblyTitle>
		<AssemblyDescription>Designed to support</AssemblyDescription>

		<!-- Firma/autor/prawa. -->
		<Company>Xenos B.V.</Company>
		<Authors>Samuel Jendryke</Authors>
		<Copyright>© $([System.DateTime]::Now.Year) Xenos B.V. All rights reserved.</Copyright>
	</PropertyGroup>

	<!-- ===================================================================== -->
	<!-- 3) WERSJONOWANIE (Version / FileVersion / InformationalVersion)         -->
	<!-- ===================================================================== -->
	<PropertyGroup>
		<!-- Wersja “produktowa”/NuGet/Info; u Ciebie datowana. -->
		<Version>$([System.DateTime]::Now.ToString('yyyy.MMdd.HHmm'))</Version>

		<!-- Wersja pliku EXE (Details -> File version). -->
		<FileVersion>$(Version)</FileVersion>

		<!-- Wersja “tekstowa” (About/logi/diagnostyka, może zawierać np. git hash). -->
		<InformationalVersion>$(Version)</InformationalVersion>

		<!-- AssemblyVersion: zwykle stałe, by nie łamać bindingów/COM. -->
		<AssemblyVersion>1.0.0.0</AssemblyVersion>

		<!-- Data builda jako właściwość do użycia w atrybutach/diagnostyce. -->
		<BuildDate>$([System.DateTime]::Now.ToString('yyyy-MM-dd HH:mm:ss'))</BuildDate>
	</PropertyGroup>

	<!-- ===================================================================== -->
	<!-- 4) PUBLIKACJA / ROZMIAR / WYDAJNOŚĆ (dotnet publish)                    -->
	<!-- ===================================================================== -->
	<PropertyGroup>
		<!-- Publikacja self-contained: dołącz runtime .NET do folderu publish. -->
		<SelfContained>true</SelfContained>

		<!-- Single-file publish: false = klasyczny folder z plikami. -->
		<PublishSingleFile>false</PublishSingleFile>

		<!-- Trimming: false = brak wycinania kodu (bezpieczniej dla WinUI/reflection). -->
		<PublishTrimmed>false</PublishTrimmed>

		<!-- ReadyToRun: true = szybszy start kosztem większego rozmiaru publikacji. -->
		<PublishReadyToRun>true</PublishReadyToRun>
	</PropertyGroup>

	<!-- ===================================================================== -->
	<!-- 5) WARUNKOWE: RuntimeIdentifier zgodny z Platform                        -->
	<!-- ===================================================================== -->
	<PropertyGroup Condition="'$(Platform)'=='x64'">
		<!-- RID dla publikacji pod Windows 64-bit. -->
		<RuntimeIdentifier>win-x64</RuntimeIdentifier>
	</PropertyGroup>

	<!-- ===================================================================== -->
	<!-- 6) TARGETY: porządkowanie publish + zip + backup                         -->
	<!-- ===================================================================== -->

	<Target Name="CleanPublishFolder" BeforeTargets="Publish">
		<!-- Czyści katalog publish, żeby nie zostawały stare pliki. -->
		<RemoveDir Directories="$(PublishDir)" Condition="Exists('$(PublishDir)')" />
	</Target>

	<Target Name="CopyPriToPublish" AfterTargets="Publish">
		<!-- Kopiuj .pri do publish (gdy VS/SDK go nie przeniesie automatycznie). -->
		<ItemGroup>
			<_Pri Include="$(TargetDir)*.pri" />
		</ItemGroup>
		<Copy SourceFiles="@(_Pri)" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="true" Condition=" '@(_Pri)' != '' " />
	</Target>

	<Target Name="ZipPublish" AfterTargets="Publish">
		<!-- Pakuje folder publish do ZIP. Najpierw tworzy plik .ziping,
	     a po zakończeniu zmienia nazwę na .zip -->

		<PropertyGroup>
			<ZipTempFile>$(PublishDir)..\$(AssemblyName)_$(Version).ziping</ZipTempFile>
			<ZipFile>$(PublishDir)..\$(AssemblyName)_$(Version).zip</ZipFile>
		</PropertyGroup>

		<!-- Usuń stare pliki jeśli istnieją -->
		<Delete Files="$(ZipTempFile)" ContinueOnError="true" />
		<Delete Files="$(ZipFile)" ContinueOnError="true" />

		<!-- Tworzenie ZIP -->
		<ZipDirectory SourceDirectory="$(PublishDir)" DestinationFile="$(ZipTempFile)" />

		<!-- Zmiana nazwy po zakończeniu -->
		<Move SourceFiles="$(ZipTempFile)" DestinationFiles="$(ZipFile)" />
	</Target>

	<Target Name="ZipProjectBackup" AfterTargets="Publish">
		<!-- Backup źródeł po publish (ZIP) z wykluczeniami (bin/obj/.git itp.). -->
		<PropertyGroup>
			<_ProjectRoot>$(MSBuildProjectDirectory)</_ProjectRoot>
			<_DistDir>E:\SourceArchive\Sonex</_DistDir>
			<_SrcZip>$(_DistDir)\$(AssemblyName)-src-$(Version).zip</_SrcZip>
		</PropertyGroup>

		<MakeDir Directories="$(_DistDir)" />

		<!-- Windows tar.exe (bsdtar): ZIP przez -a -->
		<Exec Command="cmd /c tar -a -c -f &quot;$(_SrcZip)&quot; ^&#xD;&#xA;    --exclude=&quot;.git&quot; ^&#xD;&#xA;    --exclude=&quot;.vs&quot; ^&#xD;&#xA;    --exclude=&quot;bin&quot; ^&#xD;&#xA;    --exclude=&quot;obj&quot; ^&#xD;&#xA;    --exclude=&quot;_dist&quot; ^&#xD;&#xA;    --exclude=&quot;publish&quot; ^&#xD;&#xA;    --exclude=&quot;artifacts&quot; ^&#xD;&#xA;    -C &quot;$(_ProjectRoot)&quot; ." />
	</Target>

	<!-- ===================================================================== -->
	<!-- 7) Assembly metadata (dodatkowe metadane widoczne w runtime)            -->
	<!-- ===================================================================== -->
	<ItemGroup>
		<!-- AssemblyMetadata("BuildDate", "...") - do odczytu w runtime. -->
		<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
			<_Parameter1>BuildDate</_Parameter1>
			<_Parameter2>$(BuildDate)</_Parameter2>
		</AssemblyAttribute>

		<!-- Nadmiarowe względem <Authors>, ale OK gdy chcesz czytać jako metadata key/value. -->
		<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
			<_Parameter1>Authors</_Parameter1>
			<_Parameter2>Samuel Jendryke</_Parameter2>
		</AssemblyAttribute>

		<!-- “Licencja”/własność dla wewnętrznych audytów (runtime readable). -->
		<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
			<_Parameter1>LicenseType</_Parameter1>
			<_Parameter2>Proprietary</_Parameter2>
		</AssemblyAttribute>

		<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
			<_Parameter1>Owner</_Parameter1>
			<_Parameter2>Xenos B.V.</_Parameter2>
		</AssemblyAttribute>

		<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
			<_Parameter1>Rights</_Parameter1>
			<_Parameter2>Full ownership and usage rights belong to Xenos B.V.</_Parameter2>
		</AssemblyAttribute>

		<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
			<_Parameter1>Distribution</_Parameter1>
			<_Parameter2>Internal use only</_Parameter2>
		</AssemblyAttribute>
	</ItemGroup>

	<!-- ===================================================================== -->
	<!-- 8) Assets: kopiowanie zasobów do output/publish                          -->
	<!-- ===================================================================== -->
	<ItemGroup>
		<!-- Kopiuje wszystkie zasoby z Assets do bin i publish. -->
		<Content Include="Assets\**\*.*">
			<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
			<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
		</Content>

		<!-- Kopiuje ikonę EXE do bin i publish. -->
		<Content Include="AppIcon.ico">
			<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
			<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
		</Content>

		<!-- Folder “na zipy/backupy” w repo. -->
	</ItemGroup>

	<!-- ===================================================================== -->
	<!-- 9) NuGets                                                               -->
	<!-- ===================================================================== -->
	<ItemGroup>
		<PackageReference Include="AK.Toolkit.WinUI3.ScrollBarExtensions" Version="1.1.0" />
		<PackageReference Include="CommunityToolkit.WinUI.Controls.RichSuggestBox" Version="8.2.251219" />
		<PackageReference Include="FluentIcons.WinUI" Version="2.0.319" />
		<PackageReference Include="Microsoft.Graphics.Win2D" Version="1.3.2" />
		<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.7705" />
		<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.260209005" />
		<PackageReference Include="Npgsql" Version="10.0.1" />
		<PackageReference Include="System.Linq.Dynamic.Core" Version="1.7.1" />
		<PackageReference Include="WinUI.TableView" Version="1.4.0" />
	</ItemGroup>

	<!-- ===================================================================== -->
	<!-- 10) Referencje do projektów                                             -->
	<!-- ===================================================================== -->
	<ItemGroup>
		<ProjectReference Include="..\Sonex.DBWrapper\Sonex.DBWrapper.csproj" />
	</ItemGroup>

</Project>