<Project>
  <!-- Common to all Radarr Projects -->
  <PropertyGroup>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
	<ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>

    <PlatformTarget>AnyCPU</PlatformTarget>
    <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
    <RuntimeIdentifiers>win-x64;win-x86;osx-x64;osx-arm64;linux-x64;linux-musl-x64;linux-arm;linux-musl-arm;linux-arm64;linux-musl-arm64</RuntimeIdentifiers>

    <RadarrRootDir>$(MSBuildThisFileDirectory)..\</RadarrRootDir>

    <!-- Specifies the type of output -->
    <RadarrOutputType>Library</RadarrOutputType>
    <RadarrOutputType Condition="$(MSBuildProjectName.Contains('.Test'))">Test</RadarrOutputType>
    <RadarrOutputType Condition="'$(MSBuildProjectName)'=='ServiceInstall'">Exe</RadarrOutputType>
    <RadarrOutputType Condition="'$(MSBuildProjectName)'=='ServiceUninstall'">Exe</RadarrOutputType>
    <RadarrOutputType Condition="'$(MSBuildProjectName)'=='Radarr'">Exe</RadarrOutputType>
    <RadarrOutputType Condition="'$(MSBuildProjectName)'=='Radarr.Console'">Exe</RadarrOutputType>
    <RadarrOutputType Condition="'$(MSBuildProjectName)'=='Radarr.Update'">Update</RadarrOutputType>

    <!-- Specifies whether it's one of our own libraries -->
    <RadarrProject>false</RadarrProject>
    <RadarrProject Condition="$(MSBuildProjectName.StartsWith('Radarr'))">true</RadarrProject>
    <RadarrProject Condition="$(MSBuildProjectName.StartsWith('ServiceInstall'))">true</RadarrProject>
    <RadarrProject Condition="$(MSBuildProjectName.StartsWith('ServiceUninstall'))">true</RadarrProject>

    <!-- A test project gets the test sdk packages automatically added -->
    <TestProject>false</TestProject>
    <TestProject Condition="$(MSBuildProjectName.EndsWith('.Test'))">true</TestProject>
  </PropertyGroup>

  <PropertyGroup>
    <Configuration Condition="'$(Configuration)'==''">Release</Configuration>
    <!-- Centralize intermediate and default outputs -->
    <BaseIntermediateOutputPath>$(RadarrRootDir)_temp\obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
    <IntermediateOutputPath>$(RadarrRootDir)_temp\obj\$(MSBuildProjectName)\$(Configuration)\</IntermediateOutputPath>
    <OutputPath>$(RadarrRootDir)_temp\bin\$(Configuration)\$(MSBuildProjectName)\</OutputPath>

    <!-- Output to _output and _tests respectively -->
    <OutputPath Condition="'$(RadarrProject)'=='true'">$(RadarrRootDir)_output\</OutputPath>
    <OutputPath Condition="'$(RadarrOutputType)'=='Test'">$(RadarrRootDir)_tests\</OutputPath>
    <OutputPath Condition="'$(RadarrOutputType)'=='Update'">$(RadarrRootDir)_output\Radarr.Update\</OutputPath>

    <!-- Paths relative to project file for better readability -->
    <EnableBaseIntermediateOutputPathMismatchWarning>false</EnableBaseIntermediateOutputPathMismatchWarning>
    <BaseIntermediateOutputPath>$([MSBuild]::MakeRelative('$(MSBuildProjectDirectory)', '$(BaseIntermediateOutputPath)'))</BaseIntermediateOutputPath>
    <IntermediateOutputPath>$([MSBuild]::MakeRelative('$(MSBuildProjectDirectory)', '$(IntermediateOutputPath)'))</IntermediateOutputPath>
    <OutputPath>$([MSBuild]::MakeRelative('$(MSBuildProjectDirectory)', '$(OutputPath)'))</OutputPath>

    <DebugSymbols>true</DebugSymbols>
  </PropertyGroup>
  
  <!-- Test projects need bindingRedirects -->
  <PropertyGroup Condition="'$(RadarrOutputType)'=='Test'">
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    <SelfContained>false</SelfContained>
  </PropertyGroup>

  <!-- Set the Product and Version info for our own projects -->
  <PropertyGroup Condition="'$(RadarrProject)'=='true'">
    <Product>Radarr</Product>
    <Company>radarr.video</Company>
    <Copyright>Copyright 2014-$([System.DateTime]::Now.ToString('yyyy')) radarr.video (GNU General Public v3)</Copyright>
    
    <!-- Should be replaced by CI -->
    <AssemblyVersion>10.0.0.*</AssemblyVersion>
    <AssemblyConfiguration>$(Configuration)-dev</AssemblyConfiguration>
    <NeutralLanguage>en</NeutralLanguage>

    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
    <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    
    <Deterministic Condition="$(AssemblyVersion.EndsWith('*'))">False</Deterministic>
  </PropertyGroup>

  <!-- Set the AssemblyConfiguration attribute for projects -->
  <ItemGroup Condition="'$(RadarrProject)'=='true'">
    <AssemblyAttribute Include="System.Reflection.AssemblyConfigurationAttribute">
      <_Parameter1>$(AssemblyConfiguration)</_Parameter1>
    </AssemblyAttribute>
  </ItemGroup>

  <PropertyGroup>
    <!-- For now keep the NzbDrone namespace -->
    <RootNamespace Condition="'$(RadarrProject)'=='true'">$(MSBuildProjectName.Replace('Radarr','NzbDrone'))</RootNamespace>
  </PropertyGroup>

  <!-- Standard testing packages -->
  <ItemGroup Condition="'$(TestProject)'=='true'">
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
    <PackageReference Include="NUnit" Version="3.13.2" />
    <PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
    <PackageReference Include="NunitXml.TestLogger" Version="3.0.117" />
  </ItemGroup>

  <ItemGroup Condition="'$(TestProject)'=='true' and '$(TargetFramework)'=='net6.0'">
    <PackageReference Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" />
  </ItemGroup>

  <PropertyGroup Condition="'$(RadarrProject)'=='true' and '$(EnableAnalyzers)'=='false'">
    <!-- FXCop Built into Net5 SDK now as NETAnalyzers, Enabled by default on net5 projects -->
    <EnableNETAnalyzers>false</EnableNETAnalyzers>
  </PropertyGroup>

  <!-- Set up stylecop -->
  <ItemGroup Condition="'$(RadarrProject)'=='true' and '$(EnableAnalyzers)'!='false'">
    <!-- StyleCop analysis -->
    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <AdditionalFiles Include="$(SolutionDir)stylecop.json" />
  </ItemGroup>

  <!--
       Set runtime identifier to local system type if not specified
  -->
  <Choose>
    <When Condition="'$(OS)' == 'Windows_NT'">
      <PropertyGroup>
        <IsWindows>true</IsWindows>
      </PropertyGroup>
    </When>
    <When Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">
      <PropertyGroup>
        <IsOSX>true</IsOSX>
      </PropertyGroup>
    </When>
    <Otherwise>
      <PropertyGroup>
        <IsLinux>true</IsLinux>
      </PropertyGroup>
    </Otherwise>
  </Choose>

  <PropertyGroup Condition="'$(IsWindows)' == 'true' and
                            '$(RuntimeIdentifier)' == ''">
    <_UsingDefaultRuntimeIdentifier>true</_UsingDefaultRuntimeIdentifier>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  </PropertyGroup>

  <PropertyGroup Condition="'$(IsLinux)' == 'true' and
                            '$(RuntimeIdentifier)' == ''">
    <_UsingDefaultRuntimeIdentifier>true</_UsingDefaultRuntimeIdentifier>
    <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
  </PropertyGroup>

  <PropertyGroup Condition="'$(IsOSX)' == 'true' and
                            '$(RuntimeIdentifier)' == ''">
    <_UsingDefaultRuntimeIdentifier>true</_UsingDefaultRuntimeIdentifier>
    <RuntimeIdentifier>osx-x64</RuntimeIdentifier>
  </PropertyGroup>

</Project>
