generator client {
  provider = "prisma-client-js"
  engineType = "library"
  binaryTargets = ["native", "debian-openssl-1.1.x", "debian-openssl-3.0.x", "rhel-openssl-1.0.x", "rhel-openssl-3.0.x"]
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model User {
  id              String      @id @default(uuid())
  name            String
  username        String      @unique
  password        String
  shortlink_quota Int         @default(100)
  createdAt       DateTime    @default(now())
  updatedAt       DateTime    @updatedAt
  shortLinks      ShortLink[]
}

model Kabinet {
  id              String   @id @default(uuid())
  namaKabinet     String
  periode         String
  logoUrl         String   @default("/niskala.png")
  lambangUrl      String?
  filosofiLambang String?  @db.Text
  visi            String   @db.Text
  misi            String   @db.Text
  isAktif         Boolean  @default(true)
  heroPhoto1      String?  @db.Text
  heroPhoto2      String?  @db.Text
  heroPhoto3      String?  @db.Text
  heroPhoto4      String?  @db.Text
  organigramUrl   String?  @db.Text
  penanggungJawabWebId String?
  ProgramUnggulan ProgramUnggulan[]
  createdAt       DateTime @default(now())
}

model Pengurus {
  id           String       @id @default(uuid())
  nama         String
  npm          String?
  jabatan      String
  divisi       String
  angkatan     String
  fotoUrl      String
  linkedinUrl  String?
  instagramUrl String?
  awards       AwardeePH[]
}

enum StatusArtikel {
  DRAFT
  PUBLISHED
}

model Artikel {
  id        String        @id @default(uuid())
  judul     String
  slug      String        @unique
  ringkasan String        @db.Text
  konten    String        @db.Text
  thumbnail String
  author    String
  status    StatusArtikel @default(DRAFT)
  createdAt DateTime      @default(now())
}

enum StatusProker {
  PLANNING
  ONGOING
  COMPLETED
}

model ProgramKerja {
  id              String       @id @default(uuid())
  nama            String
  deskripsi       String       @db.Text
  status          StatusProker @default(PLANNING)
  bidang          String       @default("lembaga-kesekretariatan")
  penanggungJawab String?      @db.Text
  urutan          Int          @default(0)
}

model BidangLembaga {
  slug      String @id
  name      String
  shortName String
  desc      String @db.Text
  icon      String
  color     String
}

model Galeri {
  id        String        @id @default(uuid())
  judul     String
  imageUrl  String
  driveUrl  String?       @db.Text
  photos    GaleriPhoto[]
  createdAt DateTime      @default(now())
}

model GaleriPhoto {
  id        String   @id @default(uuid())
  galeriId  String
  galeri    Galeri   @relation(fields: [galeriId], references: [id], onDelete: Cascade)
  url       String   @db.Text
  createdAt DateTime @default(now())
}

model ShortLink {
  id          String   @id @default(uuid())
  slug        String   @unique
  url_asli    String   @db.Text
  jumlah_klik Int      @default(0)
  isPublic    Boolean  @default(true)
  userId      String?
  user        User?    @relation(fields: [userId], references: [id])
  createdAt   DateTime @default(now())
}

model ProgramUnggulan {
  id        String   @id @default(uuid())
  nama      String
  deskripsi String   @db.Text
  iconSvg   String?  @db.Text
  kabinetId String?
  kabinet   Kabinet?  @relation(fields: [kabinetId], references: [id])
  createdAt DateTime @default(now())
}

model Profil {
  id                String   @id @default(uuid())
  sejarah_p1        String   @db.Text
  sejarah_p2        String   @db.Text
  sejarah_card1     String   @db.Text
  sejarah_card2     String   @db.Text
  lambang_desc      String   @db.Text
  lambang_tulisan   String   @db.Text
  lambang_mahkota   String   @db.Text
  lambang_lingkaran String   @db.Text
  lambang_sayap     String   @db.Text
  lambang_elektron  String   @db.Text
  lambang_segitiga  String   @db.Text
  warna_biru        String   @db.Text
  warna_merah       String   @db.Text
  warna_putih       String   @db.Text
  mars_ciptaan      String   @db.Text
  mars_lirik        String   @db.Text
  hymne_ciptaan     String   @db.Text
  hymne_lirik       String   @db.Text
  organigramDpmUrl  String?  @db.Text
  isAktif           Boolean  @default(true)
}

model BearrLink {
  id         String   @id @default(uuid())
  kategori   String   @default("UMUM")
  judul      String
  deskripsi  String?  @db.Text
  url        String   @db.Text
  tipe_url   String
  is_active  Boolean  @default(true)
  urutan     Int      @default(0)
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
}

model FluksItem {
  id         String   @id @default(uuid())
  nama       String
  deskripsi  String?  @db.Text
  harga      Int
  kategori   String
  foto_url   String?
  link_order String?
  tipe_link  String
  stok       String
  badge      String?
  is_active  Boolean  @default(true)
  urutan     Int      @default(0)
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
}

model FluksConfig {
  id             String   @id @default(uuid())
  form_order_url String   @db.Text
  catatan        String?  @db.Text
  updated_at     DateTime @updatedAt
}

model OrbitItem {
  id                String   @id @default(uuid())
  judul             String
  deskripsi         String?  @db.Text
  harga             Int      @default(0)
  kondisi           String
  kategori          String
  foto_url          String?
  penjual_nama      String
  penjual_instagram String
  is_terjual        Boolean  @default(false)
  is_active         Boolean  @default(true)
  created_at        DateTime @default(now())
  updated_at        DateTime @updatedAt
}

model MataKuliah {
  id                   String   @id @default(uuid())
  kode                 String   @unique
  nama                 String
  sks                  Int
  semester_rekomendasi Int
  prodi                String   @default("PENDIDIKAN FISIKA")
  kategori             String?
  created_at           DateTime @default(now())
  updated_at           DateTime @updatedAt
}

// ===== MODUL KONTEN BARU =====

model Prestasi {
  id        String   @id @default(uuid())
  judul     String
  narasi    String   @db.Text
  imageUrl  String?  @db.Text
  createdAt DateTime @default(now())
}

model RangersTalk {
  id        String   @id @default(uuid())
  judul     String
  narasi    String   @db.Text
  imageUrl  String?  @db.Text
  createdAt DateTime @default(now())
}

model LaporanKeuangan {
  id        String   @id @default(uuid())
  judul     String
  periode   String
  narasi    String?  @db.Text
  fileUrl   String?  @db.Text
  createdAt DateTime @default(now())
}

model BeritaHMF {
  id        String   @id @default(uuid())
  judul     String
  narasi    String   @db.Text
  imageUrl  String?  @db.Text
  createdAt DateTime @default(now())
}

model AwardeePH {
  id         String   @id @default(uuid())
  periode    String
  tahun      String
  kategori   String
  bidang     String
  pengurusId String
  pengurus   Pengurus @relation(fields: [pengurusId], references: [id])
  createdAt  DateTime @default(now())
}

model KomentarBeranda {
  id         String   @id @default(uuid())
  nama       String
  isi        String   @db.Text
  tipe       String   @default("KOMENTAR")
  isApproved Boolean  @default(false)
  createdAt  DateTime @default(now())
}

// ===== UNIT KEGIATAN KHUSUS (UKK) =====

model UKK {
  id        String       @id @default(uuid())
  slug      String       @unique
  nama      String
  deskripsi String       @db.Text
  visi      String?      @db.Text
  misi      String?      @db.Text
  logoUrl   String?
  proker    UKKProker[]
  anggota   UKKAnggota[]
}

model UKKProker {
  id        String   @id @default(uuid())
  judul     String
  deskripsi String?  @db.Text
  ukkId     String
  ukk       UKK      @relation(fields: [ukkId], references: [id])
  createdAt DateTime @default(now())
}

model UKKAnggota {
  id      String  @id @default(uuid())
  nama    String
  jabatan String
  fotoUrl String?
  ukkId   String
  ukk     UKK     @relation(fields: [ukkId], references: [id])
}

// ===== PARLEMEN =====

model AnggotaParlemen {
  id           String   @id @default(uuid())
  nama         String
  npm          String?
  jabatan      String
  komisi       String   // Digunakan untuk grouping, analogi 'divisi'
  angkatan     String
  fotoUrl      String
  linkedinUrl  String?
  instagramUrl String?
  createdAt    DateTime @default(now())
}

model ProdukMumas {
  id        String   @id @default(uuid())
  judul     String
  fileUrl   String   @db.Text
  kategori  String   @default("Ketetapan")
    createdAt DateTime @default(now())
}

// ===== ACARA =====

enum StatusAcara {
  DRAFT
  AKTIF
  SELESAI
}

model Acara {
  id        String      @id @default(uuid())
  slug      String      @unique
  nama      String
  deskripsi String      @db.LongText
  fotoUrl   String?     @db.Text
  status    StatusAcara @default(DRAFT)
  tabs      AcaraTab[]
  createdAt DateTime    @default(now())
  updatedAt DateTime    @updatedAt
}

model AcaraTab {
  id           String   @id @default(uuid())
  judul        String
  deskripsi    String   @db.LongText
  gambarUrl    String?  @db.Text
  gambarPosisi String   @default("atas") // "atas" | "bawah"
  acaraId      String
  acara        Acara    @relation(fields: [acaraId], references: [id], onDelete: Cascade)
  urutan       Int      @default(0)
  createdAt    DateTime @default(now())
  updatedAt    DateTime @updatedAt
}
