model Issues {
  id             Int      @id @default(autoincrement())
  title          String   @db.VarChar(100)
  description    String   @db.Text
  recommendation String   @db.Text
  attachment     String?  @db.VarChar(255)
  escalation     Boolean?

  issueStatusId Int           @map("issue_status_id")
  issueStatus   IssueStatuses @relation("issues", fields: [issueStatusId], references: [id], onDelete: Cascade)

  categoryId Int        @map("category_id")
  category   Categories @relation("issues", fields: [categoryId], references: [id], onDelete: Cascade)

  meetingRequestId Int?             @map("meeting_request_id")
  meetingRequest   MeetingRequests? @relation("issues", fields: [meetingRequestId], references: [id], onDelete: Cascade)

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

  stakeholderId Int         @map("stakeholder_id")
  stakeholder   Stakeholder @relation("issue_owner_stakeholder", fields: [stakeholderId], references: [id], onDelete: Restrict)

  governmentAgencies         GovernmentAgencyIssue[]     @relation("government_agency_issue")
  issueResolves              IssueResolves[]             @relation("issue_issue_resolves")
  decisionIssues             DecisionIssue[]             @relation("issue_decisions")
  progressReportUpdates      ProgressReportUpdate[]      @relation("issue_progress_report_updates")
  progressReportUpdateIssues ProgressReportUpdateIssue[] @relation("progress_report_update_issues")
  progressReportIssueEvaluations ProgressReportIssueEvaluation[] @relation("issue_progress_report_evaluations")

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

  @@index([issueStatusId])
  @@index([categoryId])
  @@index([meetingRequestId])
  @@index([userId])
  @@index([stakeholderId])
  @@index([deletedAt])
  @@map("issues")
}

model IssueStatuses {
  id     Int    @id @default(autoincrement())
  code   String @db.VarChar(50)
  name   String @db.VarChar(100)
  userId Int    @map("user_id")
  user   User   @relation("issue_statuses", fields: [userId], references: [id], onDelete: Cascade)

  issues                Issues[]               @relation("issues")
  issueResolves         IssueResolves[]        @relation("issue_resolve_statuses")
  progressReportUpdates ProgressReportUpdate[] @relation("issue_status_progress_report_updates")

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

  @@index([userId])
  @@index([deletedAt])
  @@index([code])
  @@map("issue_statuses")
}

model Categories {
  id     Int    @id @default(autoincrement())
  name   String @db.VarChar(100)
  userId Int    @map("user_id")
  user   User   @relation("categories", fields: [userId], references: [id], onDelete: Cascade)

  issues                            Issues[]                          @relation("issues")
  plenaryRgcDecisions               PlenaryRgcDecision[]              @relation("plenary_rgc_decisions_category")
  progressReportDashboardCategories ProgressReportDashboardCategory[] @relation("progress_report_dashboard_categories")

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

  @@index([userId])
  @@index([deletedAt])
  @@map("categories")
}

model IssueResolveAgencies {
  id             Int @id @default(autoincrement())
  issueResolveId Int @map("issue_resolve_id")
  stakeholderId  Int @map("stakeholder_id")

  issueResolve IssueResolves @relation("issue_resolve_agencies", fields: [issueResolveId], references: [id])
  stakeholder  Stakeholder   @relation("stakeholder_issue_resolve_agencies", fields: [stakeholderId], references: [id])

  @@index([issueResolveId])
  @@index([stakeholderId])
  @@map("issue_resolve_agencies")
}

model IssueResolves {
  id                Int       @id @default(autoincrement())
  meetingSummaryId  Int       @map("meeting_summary_id")
  issueId           Int       @map("issue_id")
  issueStatusId     Int?      @map("issue_status_id")
  escalateId        Int?      @map("escalate_id")
  rgcDecision       Json?     @map("rgc_decision")
  nextStep          Json?     @map("next_step")
  remark            Json?     @map("remark")
  documentReference String?   @map("document_reference") @db.VarChar(255)
  userId            Int       @map("user_id")
  createdAt         DateTime  @default(now()) @map("created_at")
  updatedAt         DateTime  @updatedAt @map("updated_at")
  deletedAt         DateTime? @map("deleted_at")

  meetingSummary MeetingSummary @relation("issue_resolves", fields: [meetingSummaryId], references: [id])
  issue          Issues         @relation("issue_issue_resolves", fields: [issueId], references: [id])
  issueStatus    IssueStatuses? @relation("issue_resolve_statuses", fields: [issueStatusId], references: [id])
  escalate       Escalate?      @relation("escalate_issue_resolves", fields: [escalateId], references: [id])
  user           User           @relation("user_issue_resolves", fields: [userId], references: [id])

  issueResolveAgencies  IssueResolveAgencies[] @relation("issue_resolve_agencies")
  progressReportUpdates ProgressReportUpdate[] @relation("issue_resolve_progress_report_updates")

  @@index([meetingSummaryId])
  @@index([issueId])
  @@index([issueStatusId])
  @@index([escalateId])
  @@index([userId])
  @@index([deletedAt])
  @@map("issue_resolves")
}
