<Project>
  <!-- Common to all Readarr Projects -->
  <PropertyGroup>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

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

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

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

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

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

    <!-- Output to _output and _tests respectively -->
    <OutputPath Condition="'$(ReadarrProject)'=='true'">$(ReadarrRootDir)_output\</OutputPath>
    <OutputPath Condition="'$(ReadarrOutputType)'=='Test'">$(ReadarrRootDir)_tests\</OutputPath>
    <OutputPath Condition="'$(ReadarrOutputType)'=='Update'">$(ReadarrRootDir)_output\Readarr.Update\</OutputPath>

    <!-- Paths relative to project file for better readability -->
    <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="'$(ReadarrOutputType)'=='Test'">
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    <SelfContained>false</SelfContained>
  </PropertyGroup>

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

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

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

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

  <!-- Allow building net framework using mono -->
  <ItemGroup>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <!-- Set up stylecop -->
  <ItemGroup Condition="'$(ReadarrProject)'=='true' and '$(EnableAnalyzers)'!='false'">
    <!-- StyleCop analysis -->
    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <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>
