import {BaseEntity, Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn} from 'typeorm';
import {BillingAccount} from 'app/gen-server/entity/BillingAccount';
import {nativeValues} from 'app/gen-server/lib/values';

@Entity('limits')
export class Limit extends BaseEntity {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column({type: Number})
  public limit: number;

  @Column({type: Number})
  public usage: number;

  @Column({type: String})
  public type: string;

  @Column({name: 'billing_account_id', type: Number})
  public billingAccountId: number;

  @ManyToOne(type => BillingAccount)
  @JoinColumn({name: 'billing_account_id'})
  public billingAccount: BillingAccount;

  @Column({name: 'created_at', type: nativeValues.dateTimeType, default: () => "CURRENT_TIMESTAMP"})
  public createdAt: Date;

  /**
   * Last time the Limit.limit value was changed, by an upgrade or downgrade. Null if it has never been changed.
   */
  @Column({name: 'changed_at', type: nativeValues.dateTimeType, nullable: true})
  public changedAt: Date|null;

  /**
   * Last time the Limit.usage was used (by sending a request to the model). Null if it has never been used.
   */
  @Column({name: 'used_at', type: nativeValues.dateTimeType, nullable: true})
  public usedAt: Date|null;

  /**
   * Last time the Limit.usage was reset, probably by billing cycle change. Null if it has never been reset.
   */
  @Column({name: 'reset_at', type: nativeValues.dateTimeType, nullable: true})
  public resetAt: Date|null;
}