content: package emu.grasscutter.game.managers.cooking;
  
  import dev.morphia.annotations.Entity;
  import lombok.Getter;
  
  
  @Entity
  public class ActiveCookCompoundData {
      private final int costTime;
      @Getter
      private final int compoundId;
      @Getter
      private int totalCount;
      private int startTime;
  
      public ActiveCookCompoundData(int compoundId, int processTime, int count, int startTime) {
          this.compoundId = compoundId;
          this.costTime = processTime;
          this.totalCount = count;
          this.startTime = startTime;
      }
  
      public int getOutputCount(int currentTime) {
          int cnt = (currentTime - startTime) / costTime;
          if (cnt > totalCount) return totalCount;
          else return cnt;
      }
  
      public int getWaitCount(int currentTime) {
          return totalCount - getOutputCount(currentTime);
      }
  
      /**
       * Get the timestamp of next output.
       * If all finished,return 0
       */
      public int getOutputTime(int currentTime) {
          int cnt = getOutputCount(currentTime);
          if (cnt == totalCount) return 0;
          else return startTime + (cnt + 1) * costTime;
      }
  
      public void addCompound(int count, int currentTime) {
          if (getOutputCount(currentTime) == totalCount) startTime = currentTime - totalCount * costTime;
          totalCount += count;
      }
  
      /**
       * Take away all finished compound.
       *
       * @return The number of finished items.
       */
      public int takeCompound(int currentTime) {
          int count = getOutputCount(currentTime);
          startTime += costTime * count;
          totalCount -= count;
          return count;
      }
  }
  