enum PlenaryStatus {
  DRAFT
  SENT
}

enum RgcDecisionStatus {
  NOT_ADDRESSED
  IN_PROGRESS
  SOLVED
}

model Plenary {
  id   Int    @id @default(autoincrement())
  name String @db.VarChar(255)

  meetingDate DateTime  @map("meeting_date") @db.Timestamp(3)
  deadline    DateTime? @map("deadline") @db.Timestamp(3)

  documentReference String?       @map("document_reference") @db.VarChar(255)
  status            PlenaryStatus @default(DRAFT)

  userId Int  @map("user_id")
  user   User @relation("plenaries", fields: [userId], references: [id], onDelete: Restrict)

  ministries   PlenaryMinistry[]
  rgcDecisions PlenaryRgcDecision[]

  createdAt DateTime  @default(now()) @map("created_at")
  updatedAt DateTime  @updatedAt @map("updated_at")
  deletedAt DateTime? @map("deleted_at")

  @@index([userId])
  @@index([meetingDate])
  @@index([status])
  @@index([deletedAt])
  @@map("plenaries")
}

model PlenaryMinistry {
  plenaryId     Int @map("plenary_id")
  stakeholderId Int @map("stakeholder_id")

  plenary     Plenary     @relation(fields: [plenaryId], references: [id], onDelete: Cascade)
  stakeholder Stakeholder @relation("plenary_ministries", fields: [stakeholderId], references: [id], onDelete: Restrict)

  @@id([plenaryId, stakeholderId])
  @@index([stakeholderId])
  @@map("plenary_ministries")
}

model PlenaryRgcDecision {
  id Int @id @default(autoincrement())

  plenaryId     Int? @map("plenary_id")
  stakeholderId Int  @map("stakeholder_id")
  categoryId    Int  @map("category_id")
  indicatorId   Int? @map("indicator_id")

  meetingDate DateTime          @map("meeting_date") @db.Date
  status      RgcDecisionStatus @default(NOT_ADDRESSED)
  focalPerson String            @map("focal_person") @db.VarChar(255)
  decision    String            @db.Text

  verificationSource String? @map("verification_source") @db.Text
  verificationLink   String? @map("verification_link") @db.VarChar(500)

  submittedToCdcAt DateTime? @map("submitted_to_cdc_at") @db.Timestamp(3)

  userId Int @map("user_id")

  plenary     Plenary?    @relation(fields: [plenaryId], references: [id], onDelete: SetNull)
  stakeholder Stakeholder @relation("plenary_rgc_decisions_stakeholder", fields: [stakeholderId], references: [id], onDelete: Restrict)
  category    Categories  @relation("plenary_rgc_decisions_category", fields: [categoryId], references: [id], onDelete: Restrict)
  indicator   Indicator?  @relation(fields: [indicatorId], references: [id], onDelete: SetNull)
  user        User        @relation("plenary_rgc_decisions_user", fields: [userId], references: [id], onDelete: Restrict)

  decisionIssues                       DecisionIssue[]                       @relation("plenary_rgc_decision_issues")
  progressReportUpdatePlenaryDecisions ProgressReportUpdatePlenaryDecision[] @relation("progress_report_update_plenary_decisions")

  createdAt DateTime  @default(now()) @map("created_at")
  updatedAt DateTime  @updatedAt @map("updated_at")
  deletedAt DateTime? @map("deleted_at")

  @@index([plenaryId])
  @@index([stakeholderId])
  @@index([categoryId])
  @@index([indicatorId])
  @@index([userId])
  @@index([meetingDate])
  @@index([status])
  @@index([submittedToCdcAt])
  @@index([deletedAt])
  @@map("plenary_rgc_decisions")
}

model DecisionIssue {
  plenaryRgcDecisionId Int @map("plenary_rgc_decision_id")
  issueId              Int @map("issue_id")

  plenaryRgcDecision PlenaryRgcDecision @relation("plenary_rgc_decision_issues", fields: [plenaryRgcDecisionId], references: [id], onDelete: Cascade)
  issue              Issues             @relation("issue_decisions", fields: [issueId], references: [id], onDelete: Cascade)

  @@id([plenaryRgcDecisionId, issueId])
  @@index([issueId])
  @@map("decision_issue")
}

model Indicator {
  id Int @id @default(autoincrement())

  name        String  @db.VarChar(100)
  description String? @db.Text

  rgcDecisions PlenaryRgcDecision[]

  createdAt DateTime  @default(now()) @map("created_at")
  updatedAt DateTime  @updatedAt @map("updated_at")
  deletedAt DateTime? @map("deleted_at")

  @@index([name])
  @@index([deletedAt])
  @@map("indicators")
}
