export enum ProductionSystem {
  PASTO = "PASTO",
  PASTO_SUPLEMENTACAO = "PASTO_SUPLEMENTACAO",
  CONFINADO = "CONFINADO",
  CONFINADO_MISTO = "CONFINADO_MISTO",
  OUTRO = "OUTRO",
}

export enum FeedUnit {
  MATERIA_NATURAL = "MATERIA_NATURAL",
  MATERIA_SECA = "MATERIA_SECA",
}

export type YesNoDispensa = "SIM" | "NAO" | "DISPENSA" | null;

export interface PropertyEntity {
  id: number;
  userId: number;

  country: string | null;
  state: string | null;
  city: string | null;

  productionSystem: ProductionSystem;

  totalAreaHa: number | null;
  pastureAreaHa: number | null;
  silageAreaHa: number | null;

  lactatingCows: number | null;
  dryCows: number | null;
  heifersOver12m: number | null;
  calvesUnder12m: number | null;
  steers: number | null;
  bulls: number | null;

  milkLitersPerDayProperty: number | null;
  milkLitersPerCowDay: number | null;
  milkFatPercentage: number | null;
  milkProteinPercentage: number | null;

  roughageKgPerCow: number | null;
  concentrateKgPerCow: number | null;
  feedUnit: FeedUnit;

  monthlyEnergyKwh: number | null;
  hasPhotovoltaicEnergy: boolean;

  hasEnvironmentalLicense: YesNoDispensa;
  hasWaterGrant: YesNoDispensa;

  createdAt: string;
  updatedAt: string;
}

export interface WaterPerformanceIndexEntity {
  id: number;
  propertyId: number;
  waterManagementScore: number | null;
  waterQualityConservationScore: number | null;
  wasteManagementScore: number | null;
  finalScore: number | null;
  createdAt: string;
  updatedAt: string;
}

export interface WaterManagementEntity {
  id: number;
  propertyId: number;
  hasHydraulicMapScore: number | null;
  hasWaterMeasurementScore: number | null;
  measurementFrequencyScore: number | null;
  monitoredConsumptionScore: number | null;
  hasReductionGoalsScore: number | null;
  hasFlowControlSystemScore: number | null;
  hasLevelFloatDrinkersScore: number | null;
  hasLevelFloatStorageScore: number | null;
  leakIdentificationScore: number | null;
  irrigationProgramScore: number | null;
  coolingSystemScore: number | null;
  rainwaterHarvestScore: number | null;
  waterReuseScore: number | null;
  finalScore: number | null;
  createdAt: string;
  updatedAt: string;
}

export interface WaterQualityConservationEntity {
  id: number;
  propertyId: number;
  monitorsQualityScore: number | null;
  monitoredWaterPointsPercentScore: number | null;
  nitrateAnalysisScore: number | null;
  ecoliAnalysisScore: number | null;
  animalsAccessWaterBodiesScore: number | null;
  drinkerWaterSupplyScore: number | null;
  waterAccumulationAreasScore: number | null;
  drinkerCleaningFrequencyScore: number | null;
  finalScore: number | null;
  createdAt: string;
  updatedAt: string;
}

export interface WasteManagementEntity {
  id: number;
  propertyId: number;
  wasteStorageSystemScore: number | null;
  impermeabilizedSystemScore: number | null;
  rainwaterDivertedScore: number | null;
  systemLeaksScore: number | null;
  roofGuttersScore: number | null;
  floorWashingPercentageScore: number | null;
  manureRakingScore: number | null;
  pressureWashingScore: number | null;
  emergencyPlanScore: number | null;
  fertilizerDocumentationScore: number | null;
  organicResidueLabScore: number | null;
  soilAnalysisScore: number | null;
  residueApplicationFrequencyScore: number | null;
  residueApplicationMethodScore: number | null;
  finalScore: number | null;
  createdAt: string;
  updatedAt: string;
}

export type UserRole = "ADMIN" | "EMBRAPA" | "USER" | null;

export interface UserEntity {
  id: number;
  email: string;
  name: string | null;
  cpf: string | null;
  passwordHash?: string | null;
  role: UserRole;
  createdAt: string;
  otpCode?: string | null;
  otpExpire?: string | null;
  usuariosCadastroId?: number | null;
}
