<?xml version="1.0" encoding="utf-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

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

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <PropertyGroup>
    <_ArtifactsDirectory>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\..\_artifacts'))</_ArtifactsDirectory>
    <_NuGetPackageOutputPath>$(_ArtifactsDirectory)\NuGetPackages\$(Configuration)</_NuGetPackageOutputPath>
    <_PackageVersionPropsFilePath>$(_NuGetPackageOutputPath)\Lucene.Net.CodeAnalysis.Dev.Version.props</_PackageVersionPropsFilePath>
    <!-- We install the analyzer package in a local directory so we don't pollute the
          .nuget cache on the dev machine with temporary builds -->
    <RestorePackagesPath>obj/LocalNuGetPackages</RestorePackagesPath>
    <_RestorePackagesPath>$(RestorePackagesPath)/lucene.net.codeanalysis.dev</_RestorePackagesPath>
  </PropertyGroup>

  <PropertyGroup Condition="Exists('$(_NuGetPackageOutputPath)')">
    <RestoreSources>$(RestoreSources);$(_NuGetPackageOutputPath)</RestoreSources>
  </PropertyGroup>

  <PropertyGroup>
    <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json</RestoreSources>
  </PropertyGroup>

  <PropertyGroup>
    <!-- Visual Studio blocks MSBuild from being able to check whether files are up-to-date.
          So, we disable that here to gain access to that info. -->
    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
  </PropertyGroup>

  <Import Project="$(_PackageVersionPropsFilePath)" Condition="Exists('$(_PackageVersionPropsFilePath)')" />

  <ItemGroup Condition="Exists('$(_PackageVersionPropsFilePath)')">
    <PackageReference Include="Lucene.Net.CodeAnalysis.Dev" VersionOverride="$(_CodeAnalysisPackageVersion)" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="J2N" />
  </ItemGroup>

  <Target Name="EnsureNuGetPackageBuilt" BeforeTargets="PrepareForBuild" Condition="'$(DesignTimeBuild)' != 'true'">

    <Message Importance="high" Text="Running NuGet Package Build..." />

    <!-- Build the project that produces the NuGet package -->
    <MSBuild Projects="..\Lucene.Net.CodeAnalysis.Dev.Package\Lucene.Net.CodeAnalysis.Dev.Package.csproj" Targets="Restore;PrepareForBuild;Build" Properties="Configuration=$(Configuration)" />

    <!-- Since we may be continually using the last build number (unless a commit occured),
          we need to clear the project local NuGet cache. -->
    <ForceDeleteDirectory DirectoryPath="$(_RestorePackagesPath)" />

    <!-- Restore again, now that the .nupkg should exist -->
    <MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Restore" Properties="Configuration=$(Configuration)" />
  </Target>

  <Target Name="CleanRestorePackagesPath" AfterTargets="Clean" Condition="'$(DesignTimeBuild)' != 'true'">
    <ForceDeleteDirectory DirectoryPath="$(_RestorePackagesPath)" />
  </Target>

  <UsingTask TaskName="ForceDeleteDirectory" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
    <ParameterGroup>
      <DirectoryPath ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
      <Using Namespace="System" />
      <Using Namespace="System.IO" />
      <Code Type="Fragment" Language="cs">
        <![CDATA[
        try
        {
            if (Directory.Exists(DirectoryPath))
            {
                Directory.Delete(DirectoryPath, recursive: true);
            }
        }
        catch (Exception ex)
        {
            // Swallow all exceptions unless MSBuild wants you to fail
            Log.LogMessage(MessageImportance.Low, $"Failed to delete directory '{DirectoryPath}': {ex.Message}");
        }
      ]]>
      </Code>
    </Task>
  </UsingTask>

</Project>
