<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildThisFileDirectory)/publish/PublishContent.targets" />
  <Import Project="$(MSBuildThisFileDirectory)/publish/Microsoft.DotNet.Cli.Badge.targets" />

  <!-- PUBLISH_TO_AZURE_BLOB env variable set by CI -->
  <Target Name="Publish"
          Condition=" '$(PUBLISH_TO_AZURE_BLOB)' != '' "
          DependsOnTargets="Init;
                            Package;
                            PublishArtifacts;
                            FinishBuild" />

  <!-- UploadToAzure target comes from Build Tools -->
  <Target Name="PublishArtifacts"
          DependsOnTargets="SetupAzureBlobInformation;
                            GenerateVersionBadge;
                            GatherItemsForPattern;
                            UploadToAzure;
                            PublishDebFilesToDebianRepo;
                            PublishCliVersionBadge" />

  <Target Name="FinishBuild">
    <FinalizeBuild AccountName="$(CloudDropAccountName)"
                   AccountKey="$(CloudDropAccessToken)"
                   NugetVersion="$(NugetVersion)"
                   Channel="$(Channel)"
                   CommitHash="$(CommitHash)"
                   BranchName="$(BranchName)" />
  </Target>

  <Target Name="SetupAzureBlobInformation">
    <PropertyGroup>
      <Product>Sdk</Product>
      <ContainerName>$(STORAGE_CONTAINER)</ContainerName>
      <CloudDropAccessToken>$(STORAGE_KEY)</CloudDropAccessToken>
      <CloudDropAccountName>$(STORAGE_ACCOUNT)</CloudDropAccountName>
      <DotnetBlobRootUrl>https://$(CloudDropAccountName).blob.core.windows.net/$(ContainerName)</DotnetBlobRootUrl>
    </PropertyGroup>
  </Target>

  <Target Name="GatherItemsForPattern">
    <ItemGroup>
      <ForPublishing Include="@(GeneratedInstallers)" />
      <ForPublishing Include="%(GenerateArchivesInputsOutputs.Outputs)" />
    </ItemGroup>

    <ItemGroup>
      <ForPublishing>
        <RelativeBlobPath>$(Product)/$(NugetVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
      </ForPublishing>
    </ItemGroup>
  </Target>

  <Target Name="PublishDebFilesToDebianRepo" Condition=" '$(OSName)' == 'ubuntu' ">
    <Error Condition="'$(REPO_ID)' == ''" Text="REPO_ID must be set as an environment variable for debian publishing." />
    <Error Condition="'$(REPO_USER)' == ''" Text="REPO_USER must be set as an environment variable for debian publishing." />
    <Error Condition="'$(REPO_PASS)' == ''" Text="REPO_PASS must be set as an environment variable for debian publishing." />
    <Error Condition="'$(REPO_SERVER)' == ''" Text="REPO_SERVER must be set as an environment variable for debian publishing." />

    <ItemGroup>
      <SdkInstallerFileItemGroup Include="$(SdkInstallerFile)" />
    </ItemGroup>
    <PropertyGroup>
      <SdkDebianUploadUrl>$(DotnetBlobRootUrl)/$(Product)/$(NugetVersion)/%(SdkInstallerFileItemGroup.Filename)%(SdkInstallerFileItemGroup.Extension)</SdkDebianUploadUrl>
      <DebianUploadJsonFile>$(SdkDebianIntermediateDirectory)/package_upload.json</DebianUploadJsonFile>
      <DebianRevisionNumber>1</DebianRevisionNumber>

      <DebianUploadJsonContent>
        {
          "name":"$(SdkDebianPackageName)",
          "version":"$(NugetVersion)-$(DebianRevisionNumber)",
          "repositoryId":"$(REPO_ID)",
          "sourceUrl": "$(SdkDebianUploadUrl)"
        }
      </DebianUploadJsonContent>
    </PropertyGroup>

    <Delete Files="$(DebianUploadJsonFile)" />
    <WriteLinesToFile File="$(DebianUploadJsonFile)" Lines="$(DebianUploadJsonContent)" />

    <Exec Command="$(RepoRoot)/scripts/publish/repoapi_client.sh -addpkg $(DebianUploadJsonFile)" />
  </Target>

  <Target Name="PublishCliVersionBadge">
    <ItemGroup>
      <CliVersionBadgeToUpload Include="$(VersionBadge)" />
    </ItemGroup>

    <ItemGroup>
      <CliVersionBadgeToUpload>
        <RelativeBlobPath>$(Product)/$(NugetVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
      </CliVersionBadgeToUpload>
    </ItemGroup>

    <UploadToAzure
      AccountKey="$(CloudDropAccessToken)"
      AccountName="$(CloudDropAccountName)"
      ContainerName="$(ContainerName)"
      Items="@(CliVersionBadgeToUpload)" />

    <SetBlobPropertiesBasedOnFileType
      AccountKey="$(CloudDropAccessToken)"
      AccountName="$(CloudDropAccountName)"
      Items="@(CliVersionBadgeToUpload)" />
  </Target>
</Project>