generator client {
  provider      = "prisma-client-js"
  binaryTargets = ["darwin-arm64", "linux-arm64-openssl-3.0.x", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"]
}

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

model Admin {
  id       Int    @id @default(1)
  password String
}

model EmailConfig {
  id       Int    @id @default(1)
  subject  String @default("Praktikumsplatz-Zusage")
  template String @default("Sehr geehrte/r {anrede} {nachname},\n\nwir freuen uns, Ihnen mitteilen zu können, dass Ihre Bewerbung für ein Praktikum erfolgreich war.\n\nSie wurden für das Praktikum bei folgender Dienststelle angenommen:\n{dienststelle}\n\nWeitere Informationen erhalten Sie in den kommenden Tagen.\n\nMit freundlichen Grüßen\nIhr Praktikumsteam")

  @@map("email_config")
}

model Dienststelle {
  id                 Int         @id @default(autoincrement())
  name               String      @unique
  plaetze            Int         @default(0)
  anmeldungenWunsch1 Anmeldung[] @relation("Wunsch1")
  anmeldungenWunsch2 Anmeldung[] @relation("Wunsch2")
  anmeldungenWunsch3 Anmeldung[] @relation("Wunsch3")
  zugewiesene        Anmeldung[] @relation("Zugewiesen")

  zeitraumPlaetze ZeitraumPlaetze[]
}

model Praktikumszeitraum {
  id          Int         @id @default(autoincrement())
  bezeichnung String      @unique
  startDatum  DateTime
  endDatum    DateTime
  anmeldungen Anmeldung[] @relation("PraktikumszeitraumAnmeldungen")

  zeitraumPlaetze ZeitraumPlaetze[]
}

model ZeitraumPlaetze {
  id             Int @id @default(autoincrement())
  zeitraumId     Int
  dienststelleId Int
  plaetze        Int @default(0)

  zeitraum     Praktikumszeitraum @relation(fields: [zeitraumId], references: [id], onDelete: Cascade)
  dienststelle Dienststelle       @relation(fields: [dienststelleId], references: [id], onDelete: Cascade)

  @@unique([zeitraumId, dienststelleId])
  @@index([zeitraumId])
  @@index([dienststelleId])
  @@map("zeitraum_plaetze")
}

enum Status {
  OFFEN
  BEARBEITUNG
  ANGENOMMEN
  ABGELEHNT
}

model Anmeldung {
  id              Int     @id @default(autoincrement())
  anrede          String
  vorname         String
  nachname        String
  geburtsdatum    String
  strasse         String
  hausnummer      String
  ort             String
  plz             String
  telefon         String
  email           String
  schulart        String
  schulklasse     String?
  noteDeutsch     Int
  noteMathe       Int
  sozialverhalten String?
  motivation      String?
  alter           Int?

  // Notfallkontakt
  notfallVorname  String?
  notfallNachname String?
  notfallTelefon  String?

  status Status @default(OFFEN)

  processedAt DateTime?

  praktikumId Int?
  praktikum   Praktikumszeitraum? @relation("PraktikumszeitraumAnmeldungen", fields: [praktikumId], references: [id])

  zugewiesenId Int?
  zugewiesen   Dienststelle? @relation("Zugewiesen", fields: [zugewiesenId], references: [id])
  wunsch1Id    Int?
  wunsch1      Dienststelle? @relation("Wunsch1", fields: [wunsch1Id], references: [id])
  wunsch2Id    Int?
  wunsch2      Dienststelle? @relation("Wunsch2", fields: [wunsch2Id], references: [id])
  wunsch3Id    Int?
  wunsch3      Dienststelle? @relation("Wunsch3", fields: [wunsch3Id], references: [id])

  timestamp DateTime   @default(now())
  pdfs      PdfDatei[]

  @@index([status])
  @@index([processedAt])
  @@index([zugewiesenId])
  @@map("anmeldungen")
}

model PdfDatei {
  id          Int       @id @default(autoincrement())
  pfad        String
  anmeldung   Anmeldung @relation(fields: [anmeldungId], references: [id], onDelete: Cascade)
  anmeldungId Int
}
