import { action, observable, extendObservable, computed, makeObservable } from 'mobx';
import { IClaim, ITransaction } from 'typings';

export default class Claims {
  private authentication: any;

  constructor({ claims = {} }: any, authentication: any) {
    extendObservable(this, claims);
    this.authentication = authentication;
    this.transaction = undefined;

    makeObservable(this, {
      selectedClaims: observable,
      transaction: observable,
      totalCharge: computed,
      addClaim: action,
      findClaim: action,
      clearClaims: action,
      reset: action,
    });
  }

  selectedClaims: IClaim[] = [];

  transaction: ITransaction | undefined = undefined;

  get totalCharge() {
    return this.selectedClaims.reduce((prev, claim) => prev + claim.totalCharge, 0);
  }

  addClaim(claim: IClaim) {
    const index = this.selectedClaims.findIndex(
      (c: IClaim) => c.claimNumber === claim.claimNumber && c.dueDate === claim.dueDate,
    );

    if (index !== -1) {
      // replace
      this.selectedClaims.splice(index, 1);
      return;
    }
    this.selectedClaims.push(claim);
  }

  findClaim(claim: IClaim) {
    return this.selectedClaims.find(
      (c: IClaim) => c.claimNumber === claim.claimNumber && c.dueDate === claim.dueDate,
    );
  }

  clearClaims() {
    this.selectedClaims = [];
  }

  reset() {
    this.selectedClaims = [];
    this.transaction = undefined;
  }
}
