/**
 * Copyright (C) 2016 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.NewChangeHtml}

import * as mailTemplate from 'com/google/gerrit/server/mail/Private.soy';

{template NewChangeHtml}
  {@param diffLines: ?}
  {@param email: ?}
  {@param fromName: ?}
  {@param ownerName: ?}
  {@param patchSet: ?}
  {@param projectName: ?}
  <p>
    {if $email.reviewerNames or $email.removedReviewerNames}
      {if $email.reviewerNames}
        {$fromName} would like{sp}
        {for $reviewerName in $email.reviewerNames}
          {if not isFirst($reviewerName)}
            {if isLast($reviewerName)}{sp}and{else},{/if}{sp}
          {/if}
          {$reviewerName}
        {/for}{sp}
        to <strong>review</strong> this change
        {if $fromName != $ownerName}{sp}authored by {$ownerName}{/if}.
        {\n}
      {/if}
      {if $email.removedReviewerNames}
        <p>
          {$fromName}{sp}
          <strong>
            removed{sp}
            {for $reviewerName in $email.removedReviewerNames}
              {if not isFirst($reviewerName)}
                {if isLast($reviewerName)}{sp}and{else},{/if}{sp}
              {/if}
              {$reviewerName}
            {/for}
          </strong>{sp}
          from this change.
        </p>
        {\n}
      {/if}
    {else}
      {$ownerName} has uploaded this change for <strong>review</strong>.
    {/if}
  </p>

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

  {call mailTemplate.Pre}
    {param content: $email.changeDetail /}
  {/call}

  {if $email.sshHost}
    {call mailTemplate.Pre}
      {param content kind="html"}
        git pull ssh:{print '//'}{$email.sshHost}/{$projectName}
        {sp}{$patchSet.refName}
      {/param}
    {/call}
  {/if}

  {if $email.includeDiff}
    {call mailTemplate.UnifiedDiff}
      {param diffLines: $diffLines /}
    {/call}
  {/if}
{/template}
