import { CampaignDetail } from './../../models/campaign-detail';
import { CampaignService } from './../../services/campaign.service';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs';

@Component({
  selector: 'app-campaign-detail',
  templateUrl: './detail.component.html',
  styleUrls: ['./detail.component.less'],
})
export class CampaignDetailComponent implements OnInit, OnDestroy {
  address!: string;
  campaignDetail!: CampaignDetail;
  subscriptions: Subscription = new Subscription();
  amountToContribute!: number;

  constructor(
    private route: ActivatedRoute,
    private campaignService: CampaignService
  ) {}

  ngOnInit(): void {
    this.route.params.subscribe((params) => {
      if (params['address']) {
        this.address = params['address'];
        this.getCampaignSummary();
      }
    });
  }

  ngOnDestroy(): void {
    this.subscriptions.unsubscribe();
  }

  getCampaignSummary() {
    this.subscriptions.add(
      this.campaignService
        .getSummary(this.address)
        .subscribe((summary: CampaignDetail) => {
          this.campaignDetail = summary;
        })
    );
  }

  onContribute() {
    this.subscriptions.add(
      this.campaignService
        .contribute(this.address, this.amountToContribute)
        .subscribe((result) => {
          this.campaignService.stopTxHash$.next(true);
        })
    );
  }
}
<app-show-txhash></app-show-txhash>
<div class="main">
  <div *ngIf="campaignDetail" class="grid-view">
    <mat-card>
      <mat-card-title>{{campaignDetail.libelle}}</mat-card-title>
      <mat-card-subtitle>Managed by. {{campaignDetail.manager}}</mat-card-subtitle>
    </mat-card>
    <mat-card>
      <mat-card-title>{{campaignDetail.minimumContribution}} ether</mat-card-title>
      <mat-card-subtitle>Campaign minimum contribution</mat-card-subtitle>
      <mat-card-content>
        <p>
          Minimum contribution to become an approver and approve spending requests.
        </p>
      </mat-card-content>
    </mat-card>
    <mat-card>
      <mat-card-title>{{campaignDetail.balance}} ether</mat-card-title>
      <mat-card-subtitle>Campaign balance</mat-card-subtitle>
      <mat-card-content>
        <p>
          Total amount of ether received.
        </p>
      </mat-card-content>
    </mat-card>
    <mat-card>
      <mat-card-title>{{campaignDetail.requests}}</mat-card-title>
      <mat-card-subtitle>Campaign spending requests</mat-card-subtitle>
      <mat-card-content>
        <p>
          Total amount of spending requests.
        </p>
      </mat-card-content>
      <mat-card-actions>
        <button color="primary" routerLink="/campaign/detail/{{address}}/requests" mat-stroked-button>View
          requests</button>
        <button color="primary" routerLink="/campaign/detail/{{address}}/requests/new" mat-stroked-button>Create
          request</button>
      </mat-card-actions>
    </mat-card>
    <mat-card>
      <mat-card-title>{{campaignDetail.approversCount}}</mat-card-title>
      <mat-card-subtitle>Campaign approvers</mat-card-subtitle>
      <mat-card-content>
        <p>
          Total number of approvers.
        </p>
      </mat-card-content>
    </mat-card>
  </div>

  <div class="contribute-block">
    <h1>Contribute to this campaign</h1>
    <mat-form-field class="example-full-width" appearance="fill">
      <mat-label>Amount to contribute</mat-label>
      <input [(ngModel)]="amountToContribute" matInput placeholder="Ex. 0.05 ether">
    </mat-form-field>
    <button [disabled]="!amountToContribute" (click)="onContribute()" mat-raised-button color="primary">Contribute</button>
  </div>

  <router-outlet></router-outlet>

</div>