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?
  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
}
