// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
  binaryTargets = ["native","debian-openssl-3.0.x"]
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

enum DialerStatus {
  rejected
  accepted
}

model Website {
  id               String             @id @default(cuid())
  name             String
  url              String             @unique
  token            String
  autoSync         Boolean            @default(false)
  createdAt        DateTime           @default(now())
  updatedAt        DateTime           @default(now()) @updatedAt
  Lead             Lead[]
  LeadSyncLog      LeadSyncLog[]
  LeadSyncErrorLog LeadSyncErrorLog[]
}

model Lead {
  id                 String        @id @default(cuid())
  formId             Int
  fullname           String?
  mobileOne          BigInt?
  address            String?
  language           String?
  product            String?
  dialerStatus       DialerStatus?
  dialerComment      String?
  inquiryTimestamp   DateTime?     @db.DateTime()
  createdAt          DateTime      @default(now())
  updatedAt          DateTime      @default(now()) @updatedAt()
  website            Website       @relation(fields: [websiteId], references: [id])
  branch             Branch?       @relation(fields: [branchId], references: [id])
  operationId        String?
  syncedWithBranchAt DateTime?
  websiteId          String
  branchId           String?
}

model LeadSyncLog {
  id        String   @id @default(cuid())
  formId    Int
  website   Website  @relation(fields: [websiteId], references: [id])
  websiteId String
  createdAt DateTime @default(now())
  updatedAt DateTime @default(now()) @updatedAt
}

model LeadSyncErrorLog {
  id        String   @id @default(cuid())
  website   Website  @relation(fields: [websiteId], references: [id])
  websiteId String
  status    Int?
  message   String?
  body      String?
  createdAt DateTime @default(now())
  updatedAt DateTime @default(now()) @updatedAt
}

model DialerSyncLog {
  id           String   @id @default(cuid())
  success      Boolean
  response     String?  @db.LongText
  responseCode Int?
  message      String?
  totalSent    Int?
  totalPassed  Int?
  totalFailed  Int?
  operationId  String?
  branch       Branch   @relation(fields: [branchId], references: [id])
  branchId     String
  createdAt    DateTime @default(now())
  updatedAt    DateTime @default(now()) @updatedAt
}

model Branch {
  id                  String                @id @default(cuid())
  name                String
  enabled             Boolean               @default(false)
  distribution        Int                   @default(0)
  ip                  String                @unique
  username            String
  token               String
  https               Boolean               @default(true)
  deleted             DateTime?
  campaignName        String?
  queueName           String?
  listName            String?
  createdAt           DateTime              @default(now())
  updatedAt           DateTime              @default(now()) @updatedAt
  Lead                Lead[]
  DialerSyncLog       DialerSyncLog[]
  ProductDistribution ProductDistribution[]
}

model Settings {
  settingKey   String   @id @unique
  settingValue String
  createdAt    DateTime @default(now())
  updatedAt    DateTime @default(now()) @updatedAt
}

model User {
  id        String      @id @default(cuid())
  name      String
  username  String      @unique
  password  String
  createdAt DateTime    @default(now())
  updatedAt DateTime    @default(now()) @updatedAt
  UserToken UserToken[]
}

model UserToken {
  id         String    @id @default(cuid())
  token      String
  user       User      @relation(fields: [userId], references: [id])
  userId     String
  expiringAt DateTime?
  createdAt  DateTime  @default(now())
  updatedAt  DateTime  @default(now()) @updatedAt
}

model Product {
  id                  String                @id @default(cuid())
  name                String                @unique
  description         String
  createdAt           DateTime              @default(now())
  updatedAt           DateTime              @default(now()) @updatedAt
  ProductDistribution ProductDistribution[]
}

model ProductDistribution {
  id           String   @id @default(cuid())
  product      Product  @relation(fields: [productId], references: [id])
  branch       Branch   @relation(fields: [branchId], references: [id])
  distribution Int
  createdAt    DateTime @default(now())
  updatedAt    DateTime @default(now()) @updatedAt
  productId    String
  branchId     String
}

model ManualLead {
  id        Int      @id @default(autoincrement())
  fullname  String
  mobileOne BigInt
  address   String?
  language  String
  product   String
  createdAt DateTime @default(now())
  updatedAt DateTime @default(now()) @updatedAt
}
