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

	<PropertyGroup>
		<TargetFramework>net6.0</TargetFramework>
		<Nullable>enable</Nullable>
		<ImplicitUsings>enable</ImplicitUsings>
		<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
		<SpaRoot>spa\</SpaRoot>
		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
		<HostSPA>True</HostSPA>
		<DefineConstants Condition="'$(HostSPA)' == 'True'">$(DefineConstants);HostSPA</DefineConstants>
		<DocumentationFile>$(AssemblyName).xml</DocumentationFile>
		<Version>4.2.0</Version>
	</PropertyGroup>

	<ItemGroup>
		<PackageReference Include="AWSSDK.S3" Version="3.7.9.30" />
		<PackageReference Include="Dapper" Version="2.0.123" />
		<PackageReference Include="FFMpegCore" Version="4.8.0" />
		<PackageReference Include="FluentMigrator" Version="3.3.2" />
		<PackageReference Include="FluentMigrator.Runner" Version="3.3.2" />
		<PackageReference Include="FluentMigrator.Runner.Postgres" Version="3.3.2" />
		<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.7" />
		<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.7" />
		<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="6.0.7" />
		<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.16.1" />
		<PackageReference Include="MSBuildGitHash" Version="2.0.2">
		  <PrivateAssets>all</PrivateAssets>
		  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
		</PackageReference>
		<PackageReference Include="NBitcoin" Version="7.0.10" />
		<PackageReference Include="nClam" Version="7.0.0" />
		<PackageReference Include="Npgsql" Version="6.0.5" />
		<PackageReference Include="prometheus-net.AspNetCore" Version="6.0.0" />
		<PackageReference Include="Seq.Extensions.Logging" Version="6.0.0" />
		<PackageReference Include="StackExchange.Redis" Version="2.6.48" />
		<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
		<PackageReference Include="System.Linq.Async" Version="6.0.1" />
	</ItemGroup>
	<ItemGroup>
		<!-- Don't publish the SPA source files, but do show them in the project files list -->
		<Content Remove="$(SpaRoot)**" />
		<Content Include="$(SolutionDir).github\workflows\build.yml" />
		<Content Include="..\docker-compose.yml">
		  <Link>docker-compose.yml</Link>
		</Content>
		<Content Include="..\Dockerfile">
		  <Link>Dockerfile</Link>
		</Content>
		<Content Include="..\nospa.dockerfile">
		  <Link>nospa.dockerfile</Link>
		</Content>
		<Content Include="..\README.md">
		  <Link>README.md</Link>
		</Content>
		<None Remove="$(SpaRoot)**" />
		<None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
	</ItemGroup>
	<ItemGroup>
	  <Compile Remove="Pages\EmailCode.cshtml.cs" />
	</ItemGroup>

	<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
		<!-- Ensure Node.js is installed -->
		<Exec Command="node --version" ContinueOnError="true">
			<Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
		</Exec>
		<Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
		<Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
		<Exec WorkingDirectory="$(SpaRoot)" Command="npx yarn install" />
	</Target>

	<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish" Condition="'$(HostSPA)' == 'True'">
		<!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
		<Exec WorkingDirectory="$(SpaRoot)" Command="npx yarn install" />
		<Exec WorkingDirectory="$(SpaRoot)" Command="npx yarn build" />
	</Target>
	<Target Name="IncludeBuildFiles" AfterTargets="PublishRunWebpack" Condition="'$(HostSPA)' == 'True'">
		<ItemGroup>
			<_CopyItems Include="$(SpaRoot)build\**\*.*" />
		</ItemGroup>
		<Copy SourceFiles="@(_CopyItems)" DestinationFolder="$(PublishDir)wwwroot\%(RecursiveDir)" />
	</Target>
	<ItemGroup>
		<AssemblyMetadata Include="%(AssemblyMetadataCommand.Identity)">
			<Value>$(Value)</Value>
		</AssemblyMetadata>
		<AssemblyAttributes Include="AssemblyMetadata">
			<_Parameter1>BuildTime</_Parameter1>
			<_Parameter2>$([System.DateTime]::UtcNow.ToBinary())</_Parameter2>
		</AssemblyAttributes>
		<Compile Include="$(IntermediateOutputPath)\build_date.cs" />
	</ItemGroup>
	<Target Name="GetBuildDate" BeforeTargets="CoreCompile">
		<WriteCodeFragment Language="C#" OutputFile="$(IntermediateOutputPath)\build_date.cs" AssemblyAttributes="@(AssemblyAttributes)" />
	</Target>
</Project>
