// learn more about it in the docs: [https://pris.ly/d/prisma-schema](https://pris.ly/d/prisma-schema)

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: [https://pris.ly/cli/accelerate-init](https://pris.ly/cli/accelerate-init)

generator client {
  provider = "prisma-client"
  output   = "../src/generated/prisma"
}

datasource db {
  provider = "mysql"
}

enum Role {
  USER
  ADMIN
}
// Modelo de Usuario MODIFICADO para compatibilidad con NextAuth
model User {
  id            String    @id @default(cuid())
  name          String?
  username      String    @unique
  passwordHash  String?
  role          Role      @default(USER)
  accounts      Account[]
  sessions      Session[]
  documents     Document[] @relation("Document")
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

// Modelo de Categorías para organizar documentos
model Category {
  id            String     @id @default(cuid())
  name          String     @unique
  description   String?
  color         String?    @default("#3B82F6") // Color en hex para UI
  icon          String?    @default("📄") // Emoji o nombre de icono
  expenseType   String?    // Tipo de gasto
  paymentMethod String?    // Forma de pago
  documents     Document[]
  createdAt     DateTime   @default(now())
  updatedAt     DateTime   @updatedAt
}

// Modelo para los documentos digitalizados
model Document {
  id            String   @id @default(cuid())
  fileName      String
  fileUrl       String   @db.Text
  extractedData Json?
  ownerId       String
  categoryId    String?   // TEMPORAL - Opcional para permitir migración
  owner         User     @relation("Document", fields: [ownerId], references: [id], onDelete: Cascade)
  category      Category? @relation(fields: [categoryId], references: [id], onDelete: Restrict)
  createdAt     DateTime @default(now())
  updatedAt     DateTime @updatedAt
}



model Account {
  id                String  @id @default(cuid())
  userId            String
  type              String
  provider          String
  providerAccountId String
  refresh_token     String? @db.Text
  access_token      String? @db.Text
  expires_at        Int?
  token_type        String?
  scope             String?
  id_token          String? @db.Text
  session_state     String?

  user User @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@unique([provider, providerAccountId])
}

model Session {
  id           String   @id @default(cuid())
  sessionToken String   @unique
  userId       String
  expires      DateTime
  user         User     @relation(fields: [userId], references: [id], onDelete: Cascade)
}

model VerificationToken {
  identifier String
  token      String   @unique
  expires    DateTime

  @@unique([identifier, token])
}

// Configuración global: Tipos de Gasto
model ExpenseType {
  id        String   @id @default(cuid())
  name      String   @unique
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

// Configuración global: Formas de Pago
model PaymentMethod {
  id        String   @id @default(cuid())
  name      String   @unique
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}
