/**
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed 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.
 */

{namespace com.google.gerrit.server.mail.template}

/**
 * The .CombinedCheckStateUpdatedHtml template will determine the contents of the email related to
 * a change for which the combined check state was updated.
 */
{template .CombinedCheckStateUpdatedHtml}
  {@param email: ?}
  {@param patchSet: ?}
  {@param checker: ?}
  {@param check: ?}
  {@param oldCombinedCheckState: ?}
  {@param newCombinedCheckState: ?}
  <p>
    The combined check state has been updated to <strong>{$newCombinedCheckState}</strong> for{sp}
    patch set {$patchSet.patchSetId} of this{sp}
    {if $email.changeUrl}
      <a href="{$email.changeUrl}">change</a>
    {else}
      change
    {/if}.
  </p>
    {if $check and $checker and $check.state == 'FAILED'
    and ($newCombinedCheckState == 'FAILED'
      or ($newCombinedCheckState == 'WARNING' and $oldCombinedCheckState != 'FAILED'))}
    <p>
      Checker{sp}
      {if $checker.url}
        <a href="{$checker.url}">{$checker.name}</a>
      {else}
        <strong>{$checker.name}</strong>
      {/if}
      {sp}updated the check state to{sp}
      {if $check.url}
        <a href="{$check.url}">{$check.state}</a>
      {else}
        {$check.state}
      {/if}
      {if $check.message}
        :<br>{$check.message}
      {else}
        .
      {/if}
    </p>
  {/if}

  {if $email.changeUrl}
    <p>
      {call .ViewChangeButton data="all" /}
    </p>
  {/if}
{/template}
