generator client {
  provider      = "prisma-client-js"
  output        = "../astro_test/node_modules/.prisma/client"
  binaryTargets = ["native", "rhel-openssl-1.1.x"]
}

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

model asistencia {
  id            String      @id
  inscripcionId String
  claseId       String
  asistio       Boolean     @default(true)
  fecha         DateTime    @default(now())
  observacion   String?     @db.Text
  pagoDebe      Boolean     @default(false)
  createdAt     DateTime    @default(now())
  updatedAt     DateTime
  clase         clase       @relation(fields: [claseId], references: [id], onDelete: Cascade, map: "Asistencia_claseId_fkey")
  inscripcion   inscripcion @relation(fields: [inscripcionId], references: [id], onDelete: Cascade, map: "Asistencia_inscripcionId_fkey")

  @@unique([inscripcionId, claseId], map: "Asistencia_inscripcionId_claseId_key")
  @@index([claseId], map: "Asistencia_claseId_fkey")
}

model categoriamaster {
  id          String   @id
  nombre      String   @unique(map: "CategoriaMaster_nombre_key")
  descripcion String?  @db.Text
  icono       String?
  enPortada   Boolean  @default(false)
  createdAt   DateTime @default(now())
  updatedAt   DateTime
  curso       curso[]
}

model chatconversacion {
  id          String        @id
  colegioId   String
  profesorId  String
  asunto      String        @default("General")
  isOpen      Boolean       @default(true)
  createdAt   DateTime      @default(now())
  updatedAt   DateTime
  colegio     colegio       @relation(fields: [colegioId], references: [id], map: "ChatConversacion_colegioId_fkey")
  user        user          @relation(fields: [profesorId], references: [id], map: "ChatConversacion_profesorId_fkey")
  chatmensaje chatmensaje[]

  @@unique([colegioId, profesorId], map: "ChatConversacion_colegioId_profesorId_key")
  @@index([profesorId], map: "ChatConversacion_profesorId_fkey")
}

model chatmensaje {
  id               String           @id
  conversacionId   String
  senderId         String
  contenido        String           @db.Text
  read             Boolean          @default(false)
  readAt           DateTime?
  createdAt        DateTime         @default(now())
  chatconversacion chatconversacion @relation(fields: [conversacionId], references: [id], onDelete: Cascade, map: "ChatMensaje_conversacionId_fkey")
  user             user             @relation(fields: [senderId], references: [id], map: "ChatMensaje_senderId_fkey")

  @@index([conversacionId], map: "ChatMensaje_conversacionId_fkey")
  @@index([senderId], map: "ChatMensaje_senderId_fkey")
}

model clase {
  id                   String       @id
  colegioId            String
  cursoId              String
  profesorId           String?
  titulo               String
  descripcion          String?      @db.Text
  fechaInicio          DateTime
  fechaFin             DateTime
  horasDadas           Float        @default(0)
  estado               String       @default("PROGRAMADA")
  createdAt            DateTime     @default(now())
  updatedAt            DateTime
  contenido            String?      @db.Text
  duracionHoras        Float        @default(2)
  materialesNecesarios String?      @db.Text
  modalidad            String       @default("MIXTA")
  numero               Int          @default(1)
  requisitos           String?      @db.Text
  activo               Boolean      @default(true)
  asistencia           asistencia[]
  colegio              colegio      @relation(fields: [colegioId], references: [id], map: "Clase_colegioId_fkey")
  curso                curso        @relation(fields: [cursoId], references: [id], map: "Clase_cursoId_fkey")
  user                 user?        @relation(fields: [profesorId], references: [id], map: "Clase_profesorId_fkey")

  @@index([colegioId], map: "Clase_colegioId_fkey")
  @@index([cursoId], map: "Clase_cursoId_fkey")
  @@index([profesorId], map: "Clase_profesorId_fkey")
}

model colegio {
  id                    String             @id
  nombre                String
  ubicacion             String?
  logoUrl               String?
  whatsapp              String?
  email                 String?
  telefono              String?
  createdAt             DateTime           @default(now())
  updatedAt             DateTime
  activo                Boolean            @default(true)
  color                 String?            @default("#1e2a47")
  requisitosInscripcion String?            @db.Text
  chatconversacion      chatconversacion[]
  clase                 clase[]
  curso                 curso[]
  mensajecontacto       mensajecontacto[]
  noticia               noticia[]
  notificacion          notificacion[]
  user                  user[]
}

model curso {
  id                 String            @id
  colegioId          String
  titulo             String
  categoria          String
  precio             Float
  fechaInicio        DateTime
  fechaFinalizacion  DateTime?
  fotosClausura      String?           @db.Text
  esTeoricoPractico  Boolean           @default(false)
  lugarPracticas     String?
  incluyeMateriales  Boolean           @default(false)
  matriculaMax       Int?
  inscritosCount     Int               @default(0)
  detallesGraduacion String?           @db.Text
  certificadoInfo    String?           @db.Text
  createdAt          DateTime          @default(now())
  updatedAt          DateTime
  categoriaMasterId  String?
  horaEntrada        String?
  horaSalida         String?
  mostrarPrecio      Boolean           @default(true)
  descripcion        String?           @db.Text
  duracionSemanas    Int?
  requisitos         String?           @db.Text
  tipoCobro          curso_tipoCobro   @default(PAGO)
  activo             Boolean           @default(true)
  clase              clase[]
  categoriamaster    categoriamaster?  @relation(fields: [categoriaMasterId], references: [id], map: "Curso_categoriaMasterId_fkey")
  colegio            colegio           @relation(fields: [colegioId], references: [id], map: "Curso_colegioId_fkey")
  cursoinstructor    cursoinstructor[]
  inscripcion        inscripcion[]
  material           material[]
  notificacion       notificacion[]

  @@index([categoriaMasterId], map: "Curso_categoriaMasterId_fkey")
  @@index([colegioId], map: "Curso_colegioId_fkey")
}

model cursoinstructor {
  cursoId      String
  instructorId String
  curso        curso  @relation(fields: [cursoId], references: [id], onDelete: Cascade, map: "CursoInstructor_cursoId_fkey")
  user         user   @relation(fields: [instructorId], references: [id], onDelete: Cascade, map: "CursoInstructor_instructorId_fkey")

  @@id([cursoId, instructorId])
  @@index([instructorId], map: "CursoInstructor_instructorId_fkey")
}

model inscripcion {
  id                 String                  @id
  userId             String
  cursoId            String
  estadoFlujo        inscripcion_estadoFlujo @default(PENDIENTE_CONTACTAR)
  comprobantePagoUrl String?
  estadoPago         inscripcion_estadoPago  @default(PENDIENTE)
  fechaInscripcion   DateTime                @default(now())
  createdAt          DateTime                @default(now())
  updatedAt          DateTime
  asistencia         asistencia[]
  curso              curso                   @relation(fields: [cursoId], references: [id], map: "Inscripcion_cursoId_fkey")
  user               user                    @relation(fields: [userId], references: [id], map: "Inscripcion_userId_fkey")
  reportepago        reportepago[]

  @@unique([userId, cursoId], map: "Inscripcion_userId_cursoId_key")
  @@index([cursoId], map: "Inscripcion_cursoId_fkey")
}

model material {
  id         String   @id
  cursoId    String
  titulo     String
  urlArchivo String
  tipo       String
  modulo     String?
  createdAt  DateTime @default(now())
  curso      curso    @relation(fields: [cursoId], references: [id], map: "Material_cursoId_fkey")

  @@index([cursoId], map: "Material_cursoId_fkey")
}

model mensajecontacto {
  id        String   @id
  nombre    String
  email     String
  telefono  String?
  mensaje   String   @db.Text
  leido     Boolean  @default(false)
  createdAt DateTime @default(now())
  colegioId String?
  colegio   colegio? @relation(fields: [colegioId], references: [id], map: "MensajeContacto_colegioId_fkey")

  @@index([colegioId], map: "MensajeContacto_colegioId_fkey")
}

model noticia {
  id        String   @id
  titulo    String
  contenido String   @db.Text
  resumen   String?  @db.Text
  imagenUrl String?
  publicado Boolean  @default(false)
  colegioId String?
  autorId   String?
  createdAt DateTime @default(now())
  updatedAt DateTime
  activo    Boolean  @default(true)
  user      user?    @relation(fields: [autorId], references: [id], map: "Noticia_autorId_fkey")
  colegio   colegio? @relation(fields: [colegioId], references: [id], map: "Noticia_colegioId_fkey")

  @@index([autorId], map: "Noticia_autorId_fkey")
  @@index([colegioId], map: "Noticia_colegioId_fkey")
}

model notificacion {
  id        String   @id
  titulo    String
  mensaje   String   @db.Text
  colegioId String?
  cursoId   String?
  userId    String?
  leido     Boolean  @default(false)
  createdAt DateTime @default(now())
  colegio   colegio? @relation(fields: [colegioId], references: [id], map: "Notificacion_colegioId_fkey")
  curso     curso?   @relation(fields: [cursoId], references: [id], map: "Notificacion_cursoId_fkey")
  user      user?    @relation(fields: [userId], references: [id], map: "Notificacion_userId_fkey")

  @@index([colegioId], map: "Notificacion_colegioId_fkey")
  @@index([cursoId], map: "Notificacion_cursoId_fkey")
  @@index([userId], map: "Notificacion_userId_fkey")
}

model reportepago {
  id             String             @id
  inscripcionId  String
  monto          Float?
  referencia     String
  fechaPago      String
  comprobanteUrl String             @db.Text
  concepto       String             @default("INSCRIPCION")
  estado         reportepago_estado @default(PENDIENTE)
  observaciones  String?            @db.Text
  createdAt      DateTime           @default(now())
  updatedAt      DateTime
  inscripcion    inscripcion        @relation(fields: [inscripcionId], references: [id], onDelete: Cascade, map: "ReportePago_inscripcionId_fkey")

  @@index([inscripcionId], map: "ReportePago_inscripcionId_fkey")
}

model user {
  id                      String             @id
  name                    String?
  email                   String             @unique(map: "User_email_key")
  password                String
  role                    user_role          @default(ESTUDIANTE)
  status                  user_status        @default(SOLVENTE)
  telefono                String?
  edad                    Int?
  representanteNombre     String?
  representanteTelefono   String?
  colegioId               String?
  createdAt               DateTime           @default(now())
  updatedAt               DateTime
  direccion               String?
  observaciones           String?            @db.Text
  apellido                String?
  cedula                  String?            @unique(map: "User_cedula_key")
  representanteParentesco String?
  activo                  Boolean            @default(true)
  chatconversacion        chatconversacion[]
  chatmensaje             chatmensaje[]
  clase                   clase[]
  cursoinstructor         cursoinstructor[]
  inscripcion             inscripcion[]
  noticia                 noticia[]
  notificacion            notificacion[]
  colegio                 colegio?           @relation(fields: [colegioId], references: [id], map: "User_colegioId_fkey")

  @@index([colegioId], map: "User_colegioId_fkey")
}

enum inscripcion_estadoFlujo {
  PENDIENTE_CONTACTAR
  CONTACTADO
  REGISTRADO_PAGO
  INSCRITO
}

enum user_role {
  SUPERADMIN
  ADMIN_COLEGIO
  PROFESOR
  ESTUDIANTE
}

enum inscripcion_estadoPago {
  PENDIENTE
  APROBADO
  RECHAZADO
}

enum user_status {
  SOLVENTE
  MOROSO
  PENDIENTE
}

enum reportepago_estado {
  PENDIENTE
  APROBADO
  RECHAZADO
}

enum curso_tipoCobro {
  GRATIS
  PAGO
  COLABORACION
}
