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

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

enum UserRole {
  VISITOR
  ENTREPRENEUR
  ADMIN
}

model User {
  id        String   @id @default(uuid())
  name      String
  email     String   @unique
  password  String
  role      UserRole @default(VISITOR)
  avatar    String?
  phone     String?
  bio       String?  @db.Text
  location  String?
  isSuspended       Boolean   @default(false)
  suspensionReason  String?

  businesses Business?
  comments   Comment[]
  createdAt  DateTime   @default(now())
  updatedAt  DateTime   @updatedAt

  // Messaging relations
  sentMessages      Message[]
  conversations     ConversationParticipant[]
  reports           MessageReport[]
}

model Business {
  id             String   @id @default(uuid())
  name           String
  slug           String?  @unique
  category       String
  location       String
  description    String   @db.Text
  logoUrl        String
  videoUrl       String?

  // Contact & Social
  contactEmail   String
  contactPhone   String?
  websiteUrl     String?
  // We use JSON to store social links (facebook, linkedin, instagram, website)
  socialLinks    Json?

  // Privacy & Status
  showEmail      Boolean  @default(true)
  showPhone      Boolean  @default(true)
  showSocials    Boolean  @default(true)
  isActive       Boolean  @default(false)

  // Stats
  verified       Boolean  @default(false)
  viewCount      Int      @default(0)
  rating         Float    @default(0.0)
  tags           String[]
  isSuspended     Boolean   @default(false)
  suspensionReason String?

  // Entrepreneur of the Month fields
  isFeatured       Boolean @default(false)
  founderName      String?
  founderImageUrl  String?
  keyMetric        String?

  // Relations
  ownerId        String   @unique
  owner          User     @relation(fields: [ownerId], references: [id])
  offers         Offer[]
  comments       Comment[]
  conversations  Conversation[]

  createdAt      DateTime @default(now())
  updatedAt      DateTime @updatedAt
}

enum OfferType {
  PRODUCT
  SERVICE
}

model Offer {
  id          String    @id @default(uuid())
  title       String
  type        OfferType
  price       Float
  currency    String    @default("XOF") // EUR or XOF
  description String?   @db.Text
  imageUrl    String
  active      Boolean   @default(true)

  // Relations
  businessId  String
  business    Business  @relation(fields: [businessId], references: [id], onDelete: Cascade)

  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt
}

model BlogPost {
  id        String   @id @default(uuid())
  title     String
  excerpt   String   @db.Text
  content   String   @db.Text
  author    String   
  date      DateTime @default(now())
  imageUrl  String

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

enum InterviewType {
  VIDEO
  ARTICLE
}

model SiteSetting {
  id           String   @id @default("singleton")
  siteName     String   @default("Afropreunariat")
  siteSlogan   String   @default("La plateforme de référence pour l'entrepreneuriat africain.")
  contactEmail String   @default("support@afropreunariat.com")
  contactPhone String?  @default("+225 00 00 00 00 00")
  address      String?  @default("Abidjan, Côte d'Ivoire")
  facebookUrl  String?
  twitterUrl   String?
  instagramUrl String?
  linkedinUrl  String?
  footerText   String?  @default("© 2025 Afropreunariat. Tous droits réservés.")
  updatedAt    DateTime @updatedAt
}

model Interview {
  id           String        @id @default(uuid())
  title        String
  guestName    String
  companyName  String
  role         String
  type         InterviewType
  thumbnailUrl String
  videoUrl     String?
  content      String?       @db.Text
  excerpt      String        @db.Text
  date         DateTime      @default(now())
  duration     String?       // "15 min" ou "5 min de lecture"

  createdAt    DateTime      @default(now())
  updatedAt    DateTime      @updatedAt
}

model Comment {
  id        String   @id @default(uuid())
  content   String   @db.Text
  
  // Relations
  authorId  String
  author    User     @relation(fields: [authorId], references: [id], onDelete: Cascade)
  businessId String
  business  Business @relation(fields: [businessId], references: [id], onDelete: Cascade)

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model AnalyticsEvent {
  id        String   @id @default(uuid())
  type      String   // PAGE_VIEW, CLICK, DWELL_TIME
  path      String
  label     String?  // For clicks (button text, link name)
  value     Float?   // For dwell time (seconds)
  metadata  Json?    // Browser, OS, etc.
  createdAt DateTime @default(now())
}

model Conversation {
  id         String   @id @default(uuid())
  businessId String
  createdAt  DateTime @default(now())
  updatedAt  DateTime @updatedAt

  business     Business                  @relation(fields: [businessId], references: [id], onDelete: Cascade)
  participants ConversationParticipant[]
  messages     Message[]
}

model ConversationParticipant {
  id             String @id @default(uuid())
  userId         String
  conversationId String

  user         User         @relation(fields: [userId], references: [id], onDelete: Cascade)
  conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)
  isArchived     Boolean @default(false)

  @@unique([userId, conversationId])
}

model Message {
  id             String   @id @default(uuid())
  content        String   @db.Text
  senderId       String
  conversationId String
  createdAt      DateTime @default(now())
  read           Boolean  @default(false)

  sender       User             @relation(fields: [senderId], references: [id], onDelete: Cascade)
  conversation Conversation     @relation(fields: [conversationId], references: [id], onDelete: Cascade)
  reports      MessageReport[]
}

model MessageReport {
  id         String       @id @default(uuid())
  reason     String?
  messageId  String
  reporterId String
  status     ReportStatus @default(PENDING)
  createdAt  DateTime     @default(now())

  message    Message @relation(fields: [messageId], references: [id], onDelete: Cascade)
  reporter   User    @relation(fields: [reporterId], references: [id], onDelete: Cascade)
}

enum ReportStatus {
  PENDING
  RESOLVED
  DISMISSED
}
