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

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

model User {
  id               String                    @id @default(uuid())
  name             String
  email            String                    @unique
  password         String
  role             UserRole                  @default(VISITOR)
  avatar           String?
  createdAt        DateTime                  @default(now())
  updatedAt        DateTime                  @updatedAt
  bio              String?
  location         String?
  phone            String?
  isSuspended      Boolean                   @default(false)
  suspensionReason String?
  businesses       Business?
  comments         Comment[]
  conversations    ConversationParticipant[]
  sentMessages     Message[]
  reports          MessageReport[]
}

model Business {
  id               String         @id @default(uuid())
  name             String
  category         String
  location         String
  description      String
  logoUrl          String
  videoUrl         String?
  contactEmail     String
  contactPhone     String?
  socialLinks      Json?
  verified         Boolean        @default(false)
  viewCount        Int            @default(0)
  rating           Float          @default(0.0)
  tags             String[]
  isFeatured       Boolean        @default(false)
  founderName      String?
  founderImageUrl  String?
  keyMetric        String?
  ownerId          String         @unique
  createdAt        DateTime       @default(now())
  updatedAt        DateTime       @updatedAt
  slug             String?        @unique
  isActive         Boolean        @default(false)
  showEmail        Boolean        @default(true)
  showPhone        Boolean        @default(true)
  showSocials      Boolean        @default(true)
  websiteUrl       String?
  isSuspended      Boolean        @default(false)
  suspensionReason String?
  owner            User           @relation(fields: [ownerId], references: [id])
  comments         Comment[]
  conversations    Conversation[]
  offers           Offer[]
}

model Offer {
  id          String    @id @default(uuid())
  title       String
  type        OfferType
  price       Float
  currency    String    @default("XOF")
  description String?
  imageUrl    String
  active      Boolean   @default(true)
  businessId  String
  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt
  business    Business  @relation(fields: [businessId], references: [id], onDelete: Cascade)
}

model BlogPost {
  id        String   @id @default(uuid())
  title     String
  excerpt   String
  content   String
  author    String
  date      DateTime @default(now())
  imageUrl  String
  createdAt DateTime @default(now())
  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?
  excerpt      String
  date         DateTime      @default(now())
  duration     String?
  createdAt    DateTime      @default(now())
  updatedAt    DateTime      @updatedAt
}

model Comment {
  id         String   @id @default(uuid())
  content    String
  authorId   String
  businessId String
  createdAt  DateTime @default(now())
  updatedAt  DateTime @updatedAt
  author     User     @relation(fields: [authorId], references: [id], onDelete: Cascade)
  business   Business @relation(fields: [businessId], references: [id], onDelete: Cascade)
}

model AnalyticsEvent {
  id        String   @id @default(uuid())
  type      String
  path      String
  label     String?
  value     Float?
  metadata  Json?
  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
  isArchived     Boolean      @default(false)
  conversation   Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)
  user           User         @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@unique([userId, conversationId])
}

model Message {
  id             String          @id @default(uuid())
  content        String
  senderId       String
  conversationId String
  createdAt      DateTime        @default(now())
  read           Boolean         @default(false)
  conversation   Conversation    @relation(fields: [conversationId], references: [id], onDelete: Cascade)
  sender         User            @relation(fields: [senderId], 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
}

enum UserRole {
  VISITOR
  ENTREPRENEUR
  ADMIN
}

enum OfferType {
  PRODUCT
  SERVICE
}

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
}
