// Datasource configuration
datasource db {
    provider = "sqlserver"
    url      = env("DATABASE_URL")
}

// User model
model User {
    id           Int        @id @default(autoincrement())
    createdAt    DateTime   @default(now())
    email        String     @unique
    passwordHash String
    name         String
    role         String     @default("USER") @db.VarChar(10)
    scientist    Scientist? @relation // Optional relation to Scientist
}

// Earthquake model
model Earthquake {
    id         Int        @id @default(autoincrement())
    createdAt  DateTime   @default(now())
    updatedAt  DateTime   @updatedAt
    name       String     @db.VarChar(255)
    date       DateTime
    location   String
    magnitude  Float
    depth      Float
    casualties Int
    creatorId  Int? // Creator's ID (Foreign Key referencing Scientist)
    creator    Scientist? @relation("ScientistEarthquakeCreator", fields: [creatorId], references: [id], onDelete: NoAction, onUpdate: NoAction) // Points back to Scientist
}

// Observatory model
model Observatory {
    id              Int        @id @default(autoincrement())
    createdAt       DateTime   @default(now())
    updatedAt       DateTime   @updatedAt
    name            String     @db.VarChar(255)
    location        String
    longitude       String
    latitude        String
    dateEstablished Int?
    functional      Boolean
    description     String?    @db.Text
    creatorId       Int? // Creator's ID (Foreign Key referencing Scientist)
    creator         Scientist? @relation("ScientistObservatoryCreator", fields: [creatorId], references: [id], onDelete: NoAction, onUpdate: NoAction) // Points back to Scientist
}

// Scientist model
model Scientist {
    id        Int      @id @default(autoincrement())
    name      String
    createdAt DateTime @default(now())
    level     String   @db.VarChar(10) // Junior or Senior
    user      User     @relation(fields: [userId], references: [id]) // Relates to the User model
    userId    Int      @unique

    // Self-referencing relation: superior and subordinates
    superior     Scientist?  @relation("SuperiorRelation", fields: [superiorId], references: [id], onDelete: NoAction, onUpdate: NoAction) // Parent scientist
    superiorId   Int?
    subordinates Scientist[] @relation("SuperiorRelation") // Scientists who view this one as a superior

    // Earthquake and Observatory relations
    earthquakes   Earthquake[]  @relation("ScientistEarthquakeCreator") // Scientists can create earthquakes
    observatories Observatory[] @relation("ScientistObservatoryCreator") // Scientists can create observatories
}
