import { GangMemberUpgrade } from "./GangMemberUpgrade";
import { GangMember } from "./GangMember";
import { WorkerScript } from "../Netscript/WorkerScript";
import { IPlayer } from "../PersonObjects/IPlayer";
import { IAscensionResult } from "./IAscensionResult";

export interface IGang {
  facName: string;
  members: GangMember[];
  wanted: number;
  respect: number;

  isHackingGang: boolean;

  respectGainRate: number;
  wantedGainRate: number;
  moneyGainRate: number;

  storedCycles: number;

  storedTerritoryAndPowerCycles: number;

  territoryClashChance: number;
  territoryWarfareEngaged: boolean;

  notifyMemberDeath: boolean;

  getPower(): number;
  getTerritory(): number;
  process(numCycles: number, player: IPlayer): void;
  processGains(numCycles: number, player: IPlayer): void;
  processTerritoryAndPowerGains(numCycles: number): void;
  processExperienceGains(numCycles: number): void;
  clash(won: boolean): void;
  canRecruitMember(): boolean;
  getRespectNeededToRecruitMember(): number;
  recruitMember(name: string): boolean;
  getWantedPenalty(): number;
  calculatePower(): number;
  killMember(member: GangMember): void;
  ascendMember(member: GangMember, workerScript?: WorkerScript): IAscensionResult;
  getDiscount(): number;
  getAllTaskNames(): string[];
  getUpgradeCost(upg: GangMemberUpgrade): number;
  toJSON(): any;
}
