<div class="container-xl">

  <div class="title-block">
    <div *ngIf="rbfTransaction" class="alert alert-mempool" role="alert">
      <span i18n="transaction.rbf.replacement|RBF replacement">This transaction has been replaced by:</span>
      <a class="alert-link" [routerLink]="['/tx/' | relativeUrl, rbfTransaction.txid]" [state]="{ data: rbfTransaction }">
        <span class="d-inline d-lg-none">{{ rbfTransaction.txid | shortenString : 24 }}</span>
        <span class="d-none d-lg-inline">{{ rbfTransaction.txid }}</span>
      </a>
    </div>
  
    <h1 class="float-left mr-3 mb-md-3" i18n="shared.transaction">Transaction</h1>

    <ng-template [ngIf]="tx?.status?.confirmed">
      <button *ngIf="latestBlock" type="button" class="btn btn-sm btn-success float-right mr-2 mt-1 mt-md-3">{{ latestBlock.height - tx.status.block_height + 1 }} <ng-container *ngIf="latestBlock.height - tx.status.block_height + 1 == 1" i18n="shared.confirmation-count.singular|Transaction singular confirmation count">confirmation</ng-container><ng-container *ngIf="latestBlock.height - tx.status.block_height + 1 > 1" i18n="shared.confirmation-count.plural|Transaction plural confirmation count">confirmations</ng-container></button>
    </ng-template>
    <ng-template [ngIf]="tx && !tx?.status.confirmed">
      <button type="button" class="btn btn-sm btn-danger float-right mr-2 mt-1 mt-md-3" i18n="transaction.unconfirmed|Transaction unconfirmed state">Unconfirmed</button>
    </ng-template>

    <div>
      <a [routerLink]="['/tx/' | relativeUrl, txId]" style="line-height: 56px;">
        <span class="d-inline d-lg-none">{{ txId | shortenString : 24 }}</span>
        <span class="d-none d-lg-inline">{{ txId }}</span>
      </a>
      <app-clipboard [text]="txId"></app-clipboard>
    </div>
    <div class="clearfix"></div>
  </div>
  <div class="clearfix"></div>

  <ng-template [ngIf]="!isLoadingTx && !error">

    <ng-template [ngIf]="tx.status.confirmed" [ngIfElse]="unconfirmedTemplate">
    
      <div class="box">
        <div class="row">
          <div class="col-sm">
            <table class="table table-borderless table-striped">
              <tbody>
                <tr>
                  <td i18n="transaction.timestamp|Transaction Timestamp">Timestamp</td>
                  <td>
                    {{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm' }}
                    <div class="lg-inline">
                      <i>(<app-time-since [time]="tx.status.block_time" [fastRender]="true"></app-time-since>)</i>
                    </div>
                  </td>
                </tr>
                <tr *ngIf="latestBlock && tx.status.block_height <= latestBlock.height - 8">
                  <td class="td-width" i18n="transaction.included-in-block|Transaction included in block">Included in block</td>
                  <td>
                    <a [routerLink]="['/block/' | relativeUrl, tx.status.block_hash]" [state]="{ data: { blockHeight: tx.status.block_height } }">{{ tx.status.block_height }}</a>
                  </td>
                </tr>
                <ng-template [ngIf]="transactionTime > 0">
                  <tr>
                    <td i18n="transaction.confirmed|Transaction Confirmed state">Confirmed</td>
                    <td><span i18n="transaction.confirmed.after|Transaction confirmed after">After</span>&nbsp;<app-timespan [time]="tx.status.block_time - transactionTime"></app-timespan></td>
                  </tr>
                </ng-template>
                <tr *ngIf="network !== 'liquid'">
                  <td class="td-width" i18n="transaction.features|Transaction features">Features</td>
                  <td>
                    <app-tx-features [tx]="tx"></app-tx-features>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
          <div class="col-sm">
            <table class="table table-borderless table-striped">
              <tbody>
                <tr>
                  <td class="td-width" i18n="transaction.fee|Transaction fee">Fee</td>
                  <td>{{ tx.fee | number }} sat (<app-fiat [value]="tx.fee"></app-fiat>)</td>
                </tr>
                <tr>
                  <td i18n="transaction.fee-per-vbyte|Transaction fee">Fee per vByte</td>
                  <td>
                    {{ tx.fee / (tx.weight / 4) | number : '1.1-1' }} <span i18n="shared.sat-vbyte|sat/vB">sat/vB</span>
                    &nbsp;
                    <app-tx-fee-rating *ngIf="tx.fee" [tx]="tx"></app-tx-fee-rating>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>

        </div>
      </div>

    </ng-template>

    <ng-template #unconfirmedTemplate>

      <div class="box">
        <div class="row">
          <div class="col-sm">
            <table class="table table-borderless table-striped">
              <tbody>
                <ng-template [ngIf]="transactionTime !== 0">
                  <tr *ngIf="transactionTime === -1; else firstSeenTmpl">
                    <td><span class="skeleton-loader"></span></td>
                    <td><span class="skeleton-loader"></span></td>
                  </tr>
                  <ng-template #firstSeenTmpl>
                    <tr>
                      <td i18n="transaction.first-seen|Transaction first seen">First seen</td>
                      <td><i><app-time-since [time]="transactionTime" [fastRender]="true"></app-time-since></i></td>
                    </tr>
                  </ng-template>
                </ng-template>
                <tr>
                  <td class="td-width" i18n="transaction.eta|Transaction ETA">ETA</td>
                  <td>
                    <ng-template [ngIf]="txInBlockIndex === undefined" [ngIfElse]="estimationTmpl">
                      <span class="skeleton-loader"></span>
                    </ng-template>
                    <ng-template #estimationTmpl>
                      <ng-template [ngIf]="txInBlockIndex >= 7" [ngIfElse]="belowBlockLimit">
                        <span i18n="transaction.eta.in-several-hours|Transaction ETA in several hours or more">In several hours (or more)</span>
                      </ng-template>
                      <ng-template #belowBlockLimit>
                        <ng-template [ngIf]="network === 'liquid'" [ngIfElse]="timeEstimateDefault">
                          &lt; {{ 1 * txInBlockIndex + 1 }}&nbsp;<span i18n="transaction.minutes|Transaction Minutes">minutes</span>&nbsp;<i>(<ng-template [ngIf]="txInBlockIndex === 0" [ngIfElse]="blocksPlural" i18n="shared.block">{{ txInBlockIndex + 1 }} block</ng-template>)</i>
                        </ng-template>
                        <ng-template #timeEstimateDefault>
                          ~{{ 10 * txInBlockIndex + 10 }}&nbsp;<span i18n="transaction.minutes|Transaction Minutes">minutes</span>&nbsp;<i>(<ng-template [ngIf]="txInBlockIndex === 0" [ngIfElse]="blocksPlural" i18n="shared.block">{{ txInBlockIndex + 1 }} block</ng-template>)</i>
                        </ng-template>
                      </ng-template>
                    </ng-template>
                  </td>
                </tr>
                <tr *ngIf="network !== 'liquid'">
                  <td class="td-width" i18n="transaction.features|Transaction Features">Features</td>
                  <td>
                    <app-tx-features [tx]="tx"></app-tx-features>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
          <div class="col-sm">
            <table class="table table-borderless table-striped">
              <tbody>
                <tr>
                  <td class="td-width" i18n="transaction.fee|Transaction Fee">Fee</td>
                  <td>{{ tx.fee | number }} <span i18n="transaction.fee.sat|Transaction Fee sat">sat</span> (<app-fiat [value]="tx.fee"></app-fiat>)</td>
                </tr>
                <tr>
                  <td i18n="transaction.fee-per-vbyte|Transaction fee">Fee per vByte</td>
                  <td>{{ tx.fee / (tx.weight / 4) | number : '1.1-1' }} <span i18n="shared.sat-vbyte|sat/vB">sat/vB</span></td>
                </tr>
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </ng-template>

    <br>

    <h2 class="float-left" i18n="transaction.inputs-and-outputs|Transaction inputs and outputs">Inputs & Outputs</h2>

    <button type="button" class="btn btn-outline-info btn-sm float-right mr-1 mt-0 mt-md-2" (click)="txList.toggleDetails()" i18n="transaction.details|Transaction Details">Details</button>

    <div class="clearfix"></div>

    <app-transactions-list #txList [transactions]="[tx]" [transactionPage]="true"></app-transactions-list>

    <h2 i18n="transaction.details">Details</h2>
    <div class="box">
      <table class="table table-borderless table-striped">
        <tbody>
          <tr>
            <td i18n="transaction.size|Transaction Size">Size</td>
            <td>{{ tx.size | bytes: 2 }}</td>
          </tr>
          <tr>
            <td i18n="transaction.vsize|Transaction Virtual Size">Virtual size</td>
            <td>{{ tx.weight / 4 | vbytes: 2 }}</td>
          </tr>
          <tr>
            <td i18n="transaction.weight|Transaction Weight">Weight</td>
            <td>{{ tx.weight | wuBytes: 2 }}</td>
          </tr>
        </tbody>
      </table>
    </div>

  </ng-template>

  <ng-template [ngIf]="isLoadingTx && !error">

    <div class="box">
      <div class="row">
        <div class="col-sm">
          <table class="table table-borderless table-striped">
            <tbody>
              <tr>
                <td class="td-width"><span class="skeleton-loader"></span></td>
                <td><span class="skeleton-loader"></span></td>
              </tr>
              <tr>
                <td><span class="skeleton-loader"></span></td>
                <td><span class="skeleton-loader"></span></td>
              </tr>
            </tbody>
          </table>
        </div>
        <div class="col-sm">
          <table class="table table-borderless table-striped">
            <tbody>
              <tr>
                <td class="td-width"><span class="skeleton-loader"></span></td>
                <td><span class="skeleton-loader"></span></td>
              </tr>
              <tr>
                <td><span class="skeleton-loader"></span></td>
                <td><span class="skeleton-loader"></span></td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
    </div>

    <br>

    <h2>Inputs & Outputs</h2>

    <div class="box">
      <div class="row">
        <table class="table table-borderless table-striped">
          <tbody>
            <tr>
              <td><span class="skeleton-loader"></span></td>
              <td><span class="skeleton-loader"></span></td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>

    <br>

    <h2>Details</h2>
    <div class="box">
      <table class="table table-borderless table-striped">
        <tbody>
          <tr>
            <td><span class="skeleton-loader"></span></td>
            <td><span class="skeleton-loader"></span></td>
          </tr>
          <tr>
            <td><span class="skeleton-loader"></span></td>
            <td><span class="skeleton-loader"></span></td>
          </tr>
          <tr>
            <td><span class="skeleton-loader"></span></td>
            <td><span class="skeleton-loader"></span></td>
          </tr>
        </tbody>
      </table>
    </div>

  </ng-template>

  <ng-template [ngIf]="error">

    <div class="text-center" *ngIf="waitingForTransaction; else errorTemplate">
      <h3 i18n="transaction.error.transaction-not-found">Transaction not found.</h3>
      <h5 i18n="transaction.error.waiting-for-it-to-appear">Waiting for it to appear in the mempool...</h5>
      <div class="spinner-border text-light mt-2"></div>
    </div>
    
    <ng-template #errorTemplate>
      <div class="text-center">
        <h3>{{ error.error }}</h3>
      </div>
    </ng-template>
  </ng-template>

</div>

<br>

<ng-template #blocksPlural i18n="shared.blocks">{{ txInBlockIndex + 1 }} blocks</ng-template>
