generator client {
  provider = "prisma-client-js"
}

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

enum Role {
  SUPER_ADMIN
  ADMIN
  TEAM_MEMBER
  AGENT
  CLIENT
}

enum MessageStatus {
  PENDING
  SENT
  DELIVERED
  READ
  FAILED
}

enum SubscriptionPlan {
  FREE
  STARTER
  PROFESSIONAL
  ENTERPRISE
}

model Workspace {
  id            String         @id @default(uuid())
  name          String
  plan          SubscriptionPlan @default(FREE)
  createdAt     DateTime       @default(now())
  updatedAt     DateTime       @updatedAt

  users         User[]
  contacts      Contact[]
  messages      Message[]
  campaigns     Campaign[]
  chatbotFlows  ChatbotFlow[]
  subscriptions Subscription[]

  @@map("workspaces")
}

model User {
  id          String      @id @default(uuid())
  name        String
  email       String      @unique
  password    String
  role        Role        @default(CLIENT)
  isActive    Boolean     @default(true)

  workspaceId String
  workspace   Workspace   @relation(fields: [workspaceId], references: [id])

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

  @@map("users")
}

model Contact {
  id          String      @id @default(uuid())
  name        String
  phone       String      @unique
  email       String?
  tags        String[]

  workspaceId String
  workspace   Workspace   @relation(fields: [workspaceId], references: [id])

  messages    Message[]

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

  @@map("contacts")
}

model Message {
  id          String        @id @default(uuid())
  message     String
  type        String        @default("text")
  status      MessageStatus @default(PENDING)

  contactId   String
  contact     Contact       @relation(fields: [contactId], references: [id])

  workspaceId String
  workspace   Workspace     @relation(fields: [workspaceId], references: [id])

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

  @@map("messages")
}

model Campaign {
  id            String      @id @default(uuid())
  name          String
  description   String?
  status        String      @default("draft")
  scheduledAt   DateTime?

  workspaceId   String
  workspace     Workspace   @relation(fields: [workspaceId], references: [id])

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

  @@map("campaigns")
}

model ChatbotFlow {
  id            String      @id @default(uuid())
  name          String
  nodes         Json
  edges         Json

  workspaceId   String
  workspace     Workspace   @relation(fields: [workspaceId], references: [id])

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

  @@map("chatbot_flows")
}

model Subscription {
  id            String            @id @default(uuid())
  stripeId      String?
  plan          SubscriptionPlan  @default(FREE)
  status        String            @default("active")
  expiresAt     DateTime?

  workspaceId   String
  workspace     Workspace         @relation(fields: [workspaceId], references: [id])

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

  @@map("subscriptions")
}