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

datasource db {
  provider = "mysql"
}

model activations {
  id           Int       @id @default(autoincrement()) @db.UnsignedInt
  user_id      Int       @db.UnsignedInt
  code         String
  completed    Boolean   @default(false)
  completed_at DateTime? @db.Timestamp(0)
  created_at   DateTime? @db.Timestamp(0)
  updated_at   DateTime? @db.Timestamp(0)
}

model application_form_responses {
  id                   BigInt            @id @default(autoincrement()) @db.UnsignedBigInt
  lead_form_id         BigInt            @db.UnsignedBigInt
  response_json        String            @db.LongText
  created_at           DateTime?         @db.Timestamp(0)
  updated_at           DateTime?         @db.Timestamp(0)
  fill_percentage      Int               @default(0)
  email_verified       Int               @default(0)
  otp_verified         Int               @default(0)
  lead_id              Int               @default(0)
  payment_amount       Int               @default(0)
  payment_method       String?           @db.VarChar(255)
  payment_status       Int               @default(0)
  organization_id      Int               @default(0)
  assigned_to          Int               @default(0)
  payment_need_to_take Int               @default(0)
  session_id           String?           @db.VarChar(255)
  current_step         Int               @default(0)
  status               String?           @db.VarChar(255)
  application_forms    application_forms @relation(fields: [lead_form_id], references: [id], onDelete: Cascade, onUpdate: Restrict, map: "fk_responses_form")

  @@index([lead_form_id], map: "fk_responses_form")
}

model application_forms {
  id                         BigInt                       @id @default(autoincrement()) @db.UnsignedBigInt
  unique_code                String?                      @db.VarChar(50)
  title                      String?                      @db.VarChar(255)
  description                String?                      @db.Text
  status                     application_forms_status?    @default(active)
  created_by                 BigInt?
  created_at                 DateTime?                    @db.Timestamp(0)
  updated_at                 DateTime?                    @db.Timestamp(0)
  allowed_countries          String?                      @db.LongText
  allowed_institutes         String?                      @db.LongText
  fees                       Decimal?                     @db.Decimal(10, 2)
  tax                        Decimal?                     @db.Decimal(5, 2)
  total_amount               Decimal?                     @db.Decimal(10, 2)
  gateway                    String?                      @db.VarChar(50)
  form_name                  String?                      @db.VarChar(255)
  organization_id            Int                          @default(0)
  application_form_responses application_form_responses[]
}

model attributes {
  id              Int       @id @default(autoincrement()) @db.UnsignedInt
  code            String    @db.VarChar(255)
  name            String    @db.VarChar(255)
  type            String    @db.VarChar(255)
  lookup_type     String?   @db.VarChar(255)
  entity_type     String    @db.VarChar(255)
  sort_order      Int?
  validation      String?   @db.VarChar(255)
  is_required     Boolean   @default(false)
  is_unique       Boolean   @default(false)
  quick_add       Boolean   @default(false)
  is_user_defined Boolean   @default(true)
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)
  organization_id Int       @default(0)
  form_id         String?   @db.VarChar(255)
}

model automation_logs {
  id                  BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id     BigInt    @db.UnsignedBigInt
  lead_id             BigInt?   @db.UnsignedBigInt
  channel             String    @db.VarChar(20)
  mobile              String?   @db.VarChar(20)
  message             String?   @db.Text
  provider            String?   @db.VarChar(50)
  provider_message_id String?   @db.VarChar(100)
  status              String?   @db.VarChar(20)
  response_json       String?   @db.Text
  created_by          BigInt?   @db.UnsignedBigInt
  created_at          DateTime? @default(now()) @db.Timestamp(0)
}

model automation_raw_lead_uploads {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @db.UnsignedBigInt
  user_id         BigInt    @db.UnsignedBigInt
  file_name       String?   @db.VarChar(255)
  file_path       String?   @db.VarChar(500)
  total_rows      Int       @default(0)
  valid_rows      Int       @default(0)
  duplicate_rows  Int       @default(0)
  failed_rows     Int       @default(0)
  status          String    @default("pending") @db.VarChar(30)
  started_at      DateTime? @db.DateTime(0)
  completed_at    DateTime? @db.DateTime(0)
  error_message   String?   @db.Text
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)

  @@index([organization_id], map: "idx_org")
  @@index([status], map: "idx_status")
  @@index([user_id], map: "idx_user")
}

model automation_raw_leads {
  id                  BigInt                      @id @default(autoincrement()) @db.UnsignedBigInt
  upload_id           BigInt?                     @db.UnsignedBigInt
  name                String?
  mobile              String                      @db.VarChar(20)
  course              String?
  city                String?
  campaign            String?
  source              String?
  status              automation_raw_leads_status @default(pending)
  ivr_response        String?                     @db.VarChar(10)
  confirm_time        DateTime?                   @db.DateTime(0)
  lead_created_status Boolean                     @default(false)
  lead_created_time   DateTime?                   @db.DateTime(0)
  created_at          DateTime?                   @default(now()) @db.Timestamp(0)
  updated_at          DateTime?                   @default(now()) @db.Timestamp(0)
  organization_id     Int                         @default(0)

  @@index([mobile, course], map: "idx_mobile_course")
  @@index([organization_id, upload_id], map: "idx_org_upload")
  @@index([status], map: "idx_status")
  @@index([upload_id], map: "idx_upload_id")
}

model automation_rule_logs {
  id            BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  org_id        BigInt    @db.UnsignedBigInt
  rule_id       BigInt    @db.UnsignedBigInt
  lead_id       BigInt    @db.UnsignedBigInt
  trigger_event String    @db.VarChar(100)
  action_type   String    @db.VarChar(50)
  status        String    @default("success") @db.VarChar(20)
  message       String?   @db.Text
  created_at    DateTime? @db.Timestamp(0)
  updated_at    DateTime? @db.Timestamp(0)

  @@index([org_id, created_at], map: "idx_org_created")
  @@index([rule_id, lead_id, trigger_event], map: "idx_rule_lead_event")
}

model automation_rules {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt?   @db.UnsignedBigInt
  name            String?   @db.VarChar(255)
  trigger_event   String?   @db.VarChar(100)
  conditions      String?   @db.LongText
  actions         String    @db.LongText
  is_active       Boolean?  @default(true)
  created_by      BigInt?   @db.UnsignedBigInt
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)
}

model cache {
  key        String @id @db.VarChar(255)
  value      String @db.MediumText
  expiration Int
}

model cache_locks {
  key        String @id @db.VarChar(255)
  owner      String @db.VarChar(255)
  expiration Int
}

model call_logs {
  id            BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  lead_id       BigInt    @db.UnsignedBigInt
  agent_id      BigInt?   @db.UnsignedBigInt
  direction     String?   @db.VarChar(50)
  duration      Int?
  recording_url String?   @db.VarChar(500)
  summary       String?   @db.Text
  notes         String?   @db.Text
  created_at    DateTime? @default(now()) @db.Timestamp(0)
  updated_at    DateTime? @default(now()) @db.Timestamp(0)

  @@index([lead_id], map: "lead_id")
}

model campaigns {
  id                    Int               @id @default(autoincrement()) @db.UnsignedInt
  name                  String            @db.VarChar(255)
  subject               String            @db.VarChar(255)
  status                String?           @db.VarChar(255)
  type                  String            @db.VarChar(255)
  mail_to               String            @db.VarChar(255)
  spooling              String?           @db.VarChar(255)
  marketing_template_id Int?              @db.UnsignedInt
  marketing_event_id    Int?              @db.UnsignedInt
  created_at            DateTime?         @db.Timestamp(0)
  updated_at            DateTime?         @db.Timestamp(0)
  organization_id       Int               @default(0)
  marketing_events      marketing_events? @relation(fields: [marketing_event_id], references: [id], onUpdate: Restrict, map: "marketing_campaigns_marketing_event_id_foreign")
  email_templates       email_templates?  @relation(fields: [marketing_template_id], references: [id], onUpdate: Restrict, map: "marketing_campaigns_marketing_template_id_foreign")

  @@index([marketing_event_id], map: "marketing_campaigns_marketing_event_id_foreign")
  @@index([marketing_template_id], map: "marketing_campaigns_marketing_template_id_foreign")
}

model cities {
  id       Int    @id @default(autoincrement())
  state_id Int
  name     String @db.VarChar(255)
}

model communication_logs {
  id              BigInt                    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id Int?
  lead_id         BigInt                    @db.UnsignedBigInt
  channel         String?                   @db.VarChar(50)
  sent_by         BigInt?                   @db.UnsignedBigInt
  to              String?                   @db.VarChar(255)
  subject         String?                   @db.VarChar(255)
  content         String?                   @db.LongText
  status          communication_logs_status @default(pending)
  sent_at         DateTime?                 @db.DateTime(0)
  created_at      DateTime?                 @default(now()) @db.Timestamp(0)
  updated_at      DateTime?                 @default(now()) @db.Timestamp(0)

  @@index([lead_id], map: "lead_id")
}

model countries {
  id         Int      @id @default(autoincrement())
  name       String?  @db.VarChar(255)
  code       Int?
  created_at DateTime @default(now()) @db.DateTime(0)
}

model coupon_usages {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @db.UnsignedBigInt
  coupon_id       BigInt    @db.UnsignedBigInt
  lead_id         BigInt?   @db.UnsignedBigInt
  application_id  BigInt?   @db.UnsignedBigInt
  used_by_user_id BigInt?   @db.UnsignedBigInt
  used_at         DateTime? @db.DateTime(0)
  discount_amount Decimal   @default(0.00) @db.Decimal(10, 2)
  order_amount    Decimal   @default(0.00) @db.Decimal(10, 2)
  meta_json       String?   @db.LongText
  created_at      DateTime? @db.DateTime(0)

  @@index([coupon_id], map: "idx_coupon")
  @@index([organization_id], map: "idx_org")
}

model coupons {
  id              BigInt             @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt             @db.UnsignedBigInt
  code            String             @db.VarChar(50)
  name            String?            @db.VarChar(100)
  type            coupons_type       @default(flat)
  value           Decimal            @default(0.00) @db.Decimal(10, 2)
  min_amount      Decimal?           @db.Decimal(10, 2)
  max_discount    Decimal?           @db.Decimal(10, 2)
  usage_type      coupons_usage_type @default(single)
  usage_limit     Int?
  used_count      Int                @default(0)
  start_at        DateTime?          @db.DateTime(0)
  end_at          DateTime?          @db.DateTime(0)
  status          Int                @default(1) @db.TinyInt
  created_by      BigInt?            @db.UnsignedBigInt
  created_at      DateTime?          @db.DateTime(0)
  updated_at      DateTime?          @db.DateTime(0)

  @@unique([organization_id, code], map: "uq_org_coupon_code")
  @@index([organization_id], map: "idx_org")
}

model designation {
  id              Int       @id @default(autoincrement())
  name            String?   @db.VarChar(255)
  status          Int       @default(0)
  created_at      DateTime? @default(now()) @db.DateTime(0)
  organization_id Int       @default(0)
  created_by      Int       @default(0)
}

model email_logs {
  id                   BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  communication_log_id BigInt?
  organization_id      BigInt?
  user_id              BigInt?
  template_name        String?   @db.VarChar(255)
  to_email             String?   @db.VarChar(255)
  subject              String?   @db.VarChar(255)
  body                 String?   @db.LongText
  status               String?   @db.VarChar(50)
  response_message     String?   @db.Text
  provider             String?   @db.VarChar(200)
  sent_by              BigInt?
  created_at           DateTime? @db.Timestamp(0)
  updated_at           DateTime? @db.Timestamp(0)
  attempts             Int       @default(0)
  sent_at              DateTime? @db.DateTime(0)
  last_attempt_at      DateTime? @db.DateTime(0)
  lead_id              Int?
}

model email_settings {
  id                BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id   BigInt?   @db.UnsignedBigInt
  mail_mailer       String?   @db.VarChar(50)
  mail_host         String?   @db.VarChar(100)
  mail_port         String?   @db.VarChar(20)
  mail_username     String?   @db.VarChar(100)
  mail_password     String?   @db.VarChar(255)
  mail_encryption   String?   @db.VarChar(10)
  mail_from_address String?   @db.VarChar(100)
  mail_from_name    String?   @db.VarChar(100)
  status            Int?      @default(1) @db.TinyInt
  created_at        DateTime? @db.Timestamp(0)
  updated_at        DateTime? @db.Timestamp(0)
  mail_validatessl  Int       @default(0)
}

model email_templates {
  id              Int                    @id @default(autoincrement()) @db.UnsignedInt
  organization_id BigInt                 @db.UnsignedBigInt
  created_by      BigInt                 @db.UnsignedBigInt
  send_by         String?                @db.VarChar(50)
  title           String?                @db.VarChar(255)
  category        String?                @db.VarChar(100)
  subject         String?                @db.VarChar(255)
  message         String                 @db.LongText
  variables_json  String?                @db.LongText
  editable        Boolean                @default(true)
  sent_count      Int                    @default(0) @db.UnsignedInt
  status          email_templates_status @default(active)
  created_at      DateTime               @default(now()) @db.Timestamp(0)
  updated_at      DateTime               @default(now()) @db.Timestamp(0)
  campaigns       campaigns[]
}

model failed_jobs {
  id         BigInt   @id @default(autoincrement()) @db.UnsignedBigInt
  uuid       String   @unique(map: "failed_jobs_uuid_unique") @db.VarChar(255)
  connection String   @db.Text
  queue      String   @db.Text
  payload    String   @db.LongText
  exception  String   @db.LongText
  failed_at  DateTime @default(now()) @db.Timestamp(0)
}

model general_settings {
  id                      BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id         BigInt?   @db.UnsignedBigInt
  app_name                String?   @db.VarChar(255)
  currency                String?   @db.VarChar(10)
  timezone                String?   @db.VarChar(100)
  default_payment_gateway String?   @db.VarChar(50)
  payment_credentials     String?   @db.LongText
  date_format             String?   @db.VarChar(50)
  logo                    String?   @db.VarChar(255)
  favicon                 String?   @db.VarChar(255)
  status                  Int?      @default(1) @db.TinyInt
  created_at              DateTime? @db.Timestamp(0)
  updated_at              DateTime? @db.Timestamp(0)
}

model graphics_settings {
  id               BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id  BigInt?   @db.UnsignedBigInt
  theme_color      String?   @db.VarChar(20)
  sidebar_color    String?   @db.VarChar(20)
  navbar_color     String?   @db.VarChar(20)
  login_background String?   @db.VarChar(255)
  status           Int?      @default(1) @db.TinyInt
  created_at       DateTime? @db.Timestamp(0)
  updated_at       DateTime? @db.Timestamp(0)
}

model images {
  id          Int      @id @default(autoincrement())
  name        String?  @db.VarChar(255)
  alt         String?  @db.VarChar(255)
  category_id Int
  type        String   @db.VarChar(255)
  filename    String   @db.VarChar(255)
  orderby     Int?
  status      Int
  created_at  DateTime @db.DateTime(0)
  updated_at  DateTime @db.DateTime(0)
}

model institutes {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @db.UnsignedBigInt
  name            String    @db.VarChar(255)
  description     String?   @db.Text
  status          Int?      @default(1) @db.TinyInt
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)
}

model ivr_logs {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @db.UnsignedBigInt
  lead_id         BigInt?   @db.UnsignedBigInt
  mobile          String    @db.VarChar(20)
  dtmf            String?   @db.VarChar(10)
  call_id         String?   @db.VarChar(100)
  status          String?   @db.VarChar(20)
  provider        String?   @default("demo") @db.VarChar(50)
  response_json   String?   @db.Text
  created_at      DateTime? @default(now()) @db.Timestamp(0)
}

model ivr_settings {
  id                BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id   BigInt?   @unique(map: "uq_ivr_org") @db.UnsignedBigInt
  provider          String?   @db.VarChar(50)
  base_url          String?   @db.VarChar(255)
  authcode          String?   @db.VarChar(255)
  api_key           String?   @db.Text
  api_secret        String?   @db.Text
  caller_id         String?   @db.VarChar(50)
  default_deskphone String?   @db.VarChar(30)
  welcome_audio     String?   @db.VarChar(255)
  status            Int?      @default(1) @db.TinyInt
  created_at        DateTime? @db.Timestamp(0)
  updated_at        DateTime? @db.Timestamp(0)
}

model job_batches {
  id             String  @id @db.VarChar(255)
  name           String  @db.VarChar(255)
  total_jobs     Int
  pending_jobs   Int
  failed_jobs    Int
  failed_job_ids String  @db.LongText
  options        String? @db.MediumText
  cancelled_at   Int?
  created_at     Int
  finished_at    Int?
}

model jobs {
  id           BigInt @id @default(autoincrement()) @db.UnsignedBigInt
  queue        String @db.VarChar(255)
  payload      String @db.LongText
  attempts     Int    @db.UnsignedTinyInt
  reserved_at  Int?   @db.UnsignedInt
  available_at Int    @db.UnsignedInt
  created_at   Int    @db.UnsignedInt

  @@index([queue], map: "jobs_queue_index")
}

model landing_page_sections {
  id            BigInt        @id @default(autoincrement()) @db.UnsignedBigInt
  page_id       BigInt        @db.UnsignedBigInt
  section_key   String        @db.VarChar(100)
  content_json  String        @db.LongText
  sort_order    Int?          @default(0)
  created_at    DateTime?     @db.Timestamp(0)
  updated_at    DateTime?     @db.Timestamp(0)
  landing_pages landing_pages @relation(fields: [page_id], references: [id], onDelete: Cascade, onUpdate: Restrict, map: "fk_lps_page")

  @@index([page_id], map: "page_id")
}

model landing_pages {
  id                    BigInt                  @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id       BigInt                  @db.UnsignedBigInt
  campaign_id           BigInt?
  slug                  String                  @unique(map: "slug")
  title                 String?                 @db.VarChar(255)
  layout_name           String?                 @default("velzon") @db.VarChar(100)
  status                Int?                    @default(1) @db.TinyInt
  meta                  String?                 @db.LongText
  created_at            DateTime?               @db.Timestamp(0)
  updated_at            DateTime?               @db.Timestamp(0)
  landing_page_sections landing_page_sections[]
}

model lead_activity_logs {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @default(0) @db.UnsignedBigInt
  lead_id         BigInt    @db.UnsignedBigInt
  user_id         BigInt?   @db.UnsignedBigInt
  action          String?   @db.VarChar(100)
  description     String?   @db.Text
  meta_data       String?   @db.LongText
  created_at      DateTime? @default(now()) @db.Timestamp(0)
  updated_at      DateTime  @default(now()) @db.DateTime(0)
}

model lead_applications {
  id                BigInt                            @id @default(autoincrement())
  lead_id           BigInt?
  application_form  Int?                              @default(0) @db.TinyInt
  application_score Int?
  payment_status    lead_applications_payment_status?
  payment_method    String?                           @db.VarChar(50)
  created_at        DateTime?                         @db.DateTime(0)
}

model lead_assignment_logs {
  id                   BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  lead_id              BigInt    @db.UnsignedBigInt
  organization_id      BigInt    @db.UnsignedBigInt
  lead_source_id       BigInt?   @db.UnsignedBigInt
  assigned_to          BigInt    @db.UnsignedBigInt
  previous_assigned_to BigInt?   @db.UnsignedBigInt
  rule_type            String?   @db.VarChar(50)
  rule_id              BigInt?   @db.UnsignedBigInt
  is_reassign          Boolean?  @default(false)
  notes                String?   @db.Text
  created_at           DateTime? @db.Timestamp(0)
  updated_at           DateTime? @db.Timestamp(0)
}

model lead_column_settings {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @db.UnsignedBigInt
  user_id         BigInt    @db.UnsignedBigInt
  columns_json    String?   @db.LongText
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)

  @@unique([organization_id, user_id], map: "org_user_unique")
}

model lead_communication_logs {
  id         BigInt                             @id @default(autoincrement())
  lead_id    BigInt?
  channel    String                             @db.VarChar(50)
  direction  lead_communication_logs_direction?
  purpose    String?                            @db.VarChar(100)
  created_at DateTime?                          @db.DateTime(0)
}

/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model lead_creation_logs {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @db.UnsignedBigInt
  lead_id         BigInt    @db.UnsignedBigInt
  created_by      BigInt?   @db.UnsignedBigInt
  source_type     String    @db.VarChar(50)
  channel         String?   @db.VarChar(50)
  upload_id       BigInt?   @db.UnsignedBigInt
  ip_address      String?   @db.VarChar(45)
  user_agent      String?   @db.Text
  remarks         String?   @db.Text
  created_at      DateTime? @default(now()) @db.Timestamp(0)
  updated_at      DateTime? @default(now()) @db.Timestamp(0)

  @@index([lead_id], map: "lead_id")
  @@index([organization_id], map: "organization_id")
  @@index([source_type], map: "source_type")
}

model lead_distribution_rule_items {
  id                      BigInt                                    @id @default(autoincrement()) @db.UnsignedBigInt
  rule_id                 BigInt                                    @db.UnsignedBigInt
  source_id               BigInt?                                   @db.UnsignedBigInt
  assign_type             lead_distribution_rule_items_assign_type?
  team_id                 BigInt?                                   @db.UnsignedBigInt
  user_id                 BigInt?                                   @db.UnsignedBigInt
  designation_id          BigInt?                                   @db.UnsignedBigInt
  percentage              Int?
  created_at              DateTime?                                 @db.Timestamp(0)
  updated_at              DateTime?                                 @db.Timestamp(0)
  lead_distribution_rules lead_distribution_rules                   @relation(fields: [rule_id], references: [id], onDelete: Cascade, onUpdate: Restrict, map: "ldr_items_rule_fk")

  @@index([rule_id], map: "rule_id")
}

model lead_distribution_rules {
  id                           BigInt                                    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id              BigInt                                    @db.UnsignedBigInt
  rule_name                    String                                    @db.VarChar(255)
  distribution_type            lead_distribution_rules_distribution_type
  is_active                    Boolean                                   @default(true)
  created_at                   DateTime?                                 @db.Timestamp(0)
  updated_at                   DateTime?                                 @db.Timestamp(0)
  lead_distribution_rule_items lead_distribution_rule_items[]
}

model lead_documents {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id Int
  lead_id         BigInt    @db.UnsignedBigInt
  doc_type        String?   @db.VarChar(50)
  doc_name        String?   @db.VarChar(150)
  file_path       String    @db.VarChar(255)
  file_ext        String?   @db.VarChar(20)
  file_size       BigInt?
  uploaded_by     BigInt?   @db.UnsignedBigInt
  status          Int       @default(1) @db.TinyInt
  created_at      DateTime? @db.DateTime(0)
  updated_at      DateTime? @db.DateTime(0)
}

/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model lead_events {
  id          BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  lead_id     BigInt    @db.UnsignedBigInt
  subject     String    @db.VarChar(255)
  description String?   @db.Text
  start_at    DateTime? @db.DateTime(0)
  end_at      DateTime? @db.DateTime(0)
  owner_id    BigInt?   @db.UnsignedBigInt
  created_at  DateTime? @default(now()) @db.Timestamp(0)
  updated_at  DateTime? @default(now()) @db.Timestamp(0)
  event_type  String?   @db.VarChar(255)

  @@index([lead_id], map: "lead_id")
}

model lead_incoming_raw {
  id               BigInt                     @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id  BigInt                     @db.UnsignedBigInt
  provider         lead_incoming_raw_provider
  external_lead_id String?                    @db.VarChar(100)
  lead_data        String                     @db.LongText
  is_converted     Boolean?                   @default(false)
  created_at       DateTime                   @default(now()) @db.Timestamp(0)

  @@unique([provider, external_lead_id], map: "uniq_ext_lead")
}

model lead_integration_credentials {
  id              BigInt                                @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt                                @db.UnsignedBigInt
  provider        lead_integration_credentials_provider
  key             String                                @db.VarChar(100)
  value           String                                @db.Text
  is_encrypted    Boolean?                              @default(true)
  created_at      DateTime?                             @default(now()) @db.Timestamp(0)
  updated_at      DateTime?                             @default(now()) @db.Timestamp(0)

  @@index([organization_id, provider], map: "idx_org_provider")
}

model lead_integrations {
  id              BigInt                     @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt                     @db.UnsignedBigInt
  provider        lead_integrations_provider
  is_enabled      Boolean?                   @default(false)
  created_at      DateTime?                  @default(now()) @db.Timestamp(0)
  updated_at      DateTime?                  @default(now()) @db.Timestamp(0)

  @@unique([organization_id, provider], map: "uniq_org_provider")
}

model lead_notes {
  id         BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  lead_id    BigInt    @db.UnsignedBigInt
  note       String    @db.Text
  created_by BigInt?   @db.UnsignedBigInt
  created_at DateTime? @default(now()) @db.Timestamp(0)
  updated_at DateTime? @default(now()) @db.Timestamp(0)

  @@index([lead_id], map: "lead_id")
}

model lead_queries {
  id          Int                      @id @default(autoincrement()) @db.UnsignedInt
  lead_id     Int                      @db.UnsignedInt
  query_code  String?                  @unique(map: "query_code") @db.VarChar(50)
  subject     String                   @db.VarChar(255)
  category    lead_queries_category?   @default(general)
  priority    lead_queries_priority?   @default(medium)
  status      lead_queries_status?     @default(open)
  assigned_to Int?                     @db.UnsignedInt
  created_by  lead_queries_created_by? @default(student)
  created_at  DateTime                 @default(now()) @db.Timestamp(0)
  updated_at  DateTime                 @default(now()) @db.Timestamp(0)
  closed_at   DateTime?                @db.Timestamp(0)

  @@index([assigned_to], map: "assigned_to")
  @@index([lead_id], map: "lead_id")
}

model lead_query_messages {
  id          Int                             @id @default(autoincrement()) @db.UnsignedInt
  query_id    Int                             @db.UnsignedInt
  sender_type lead_query_messages_sender_type
  sender_id   Int?                            @db.UnsignedInt
  message     String                          @db.Text
  is_internal Boolean?                        @default(false)
  created_at  DateTime                        @default(now()) @db.Timestamp(0)

  @@index([query_id], map: "query_id")
}

model lead_saved_filters {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  institute_id    BigInt?   @db.UnsignedBigInt
  user_id         BigInt    @db.UnsignedBigInt
  name            String    @db.VarChar(150)
  filters_json    String?   @db.LongText
  columns_json    String?   @db.LongText
  sort_json       String?   @db.LongText
  is_default      Boolean   @default(false)
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)
  organization_id Int       @default(0)

  @@index([is_default], map: "idx_default")
  @@index([institute_id], map: "idx_institute_id")
  @@index([user_id], map: "idx_user_id")
}

model lead_settings {
  id              Int       @id @default(autoincrement())
  organization_id Int
  role_slug       String    @db.VarChar(50)
  field           String    @db.VarChar(50)
  can_view        Boolean?  @default(false)
  can_download    Boolean?  @default(false)
  can_edit        Boolean?  @default(false)
  created_at      DateTime? @default(now()) @db.Timestamp(0)
  updated_at      DateTime? @default(now()) @db.Timestamp(0)

  @@unique([organization_id, role_slug, field], map: "unique_role_field")
}

/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model lead_sources {
  id                   BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id      BigInt    @db.UnsignedBigInt
  name                 String    @db.VarChar(255)
  status               Boolean?  @default(true)
  lead_count           Int?      @default(0)
  billing_setup_amount Decimal?  @default(0.00) @db.Decimal(10, 2)
  total_amount         Decimal?  @db.Decimal(10, 2)
  created_at           DateTime? @db.Timestamp(0)
  updated_at           DateTime? @db.Timestamp(0)
}

model lead_statuses {
  id                BigInt              @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id   BigInt?             @db.UnsignedBigInt
  name              String              @db.VarChar(255)
  color             String?             @db.VarChar(50)
  sort_order        Int?                @default(0)
  is_active         Boolean?            @default(true)
  created_at        DateTime?           @db.Timestamp(0)
  updated_at        DateTime?           @db.Timestamp(0)
  lead_sub_statuses lead_sub_statuses[]

  @@index([organization_id], map: "organization_id")
}

model lead_sub_statuses {
  id              BigInt        @id @default(autoincrement()) @db.UnsignedBigInt
  lead_status_id  BigInt        @db.UnsignedBigInt
  organization_id BigInt?       @db.UnsignedBigInt
  name            String        @db.VarChar(255)
  sort_order      Int?          @default(0)
  is_active       Boolean?      @default(true)
  created_at      DateTime?     @db.Timestamp(0)
  updated_at      DateTime?     @db.Timestamp(0)
  color           String?       @db.VarChar(255)
  lead_statuses   lead_statuses @relation(fields: [lead_status_id], references: [id], onDelete: Cascade, onUpdate: Restrict, map: "lead_sub_statuses_status_fk")

  @@index([lead_status_id], map: "lead_sub_statuses_status_fk")
  @@index([organization_id], map: "organization_id")
}

model lead_types {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @db.UnsignedBigInt
  name            String    @db.VarChar(255)
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)
  status          Int       @default(1)
}

model lead_uploads {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt    @db.UnsignedBigInt
  user_id         BigInt    @db.UnsignedBigInt
  file_name       String?   @db.VarChar(255)
  file_path       String?   @db.VarChar(500)
  total_rows      Int       @default(0)
  valid_rows      Int       @default(0)
  duplicate_rows  Int       @default(0)
  failed_rows     Int       @default(0)
  status          String    @default("pending") @db.VarChar(30)
  started_at      DateTime? @db.DateTime(0)
  completed_at    DateTime? @db.DateTime(0)
  error_message   String?   @db.Text
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)
  upload_type     String?   @db.VarChar(255)
  institute       String?   @db.VarChar(255)
  program         String?   @db.VarChar(255)
  course          String?   @db.VarChar(255)
  assign_user     String?   @db.VarChar(255)
  assigni         String?   @db.VarChar(255)

  @@index([organization_id], map: "idx_org")
  @@index([status], map: "idx_status")
  @@index([user_id], map: "idx_user")
}

model lead_verifications {
  lead_id        BigInt    @id
  sms_verified   Int?      @default(0) @db.TinyInt
  email_verified Int?      @default(0) @db.TinyInt
  verified_at    DateTime? @db.DateTime(0)
}

model lead_webhook_logs {
  id              BigInt                     @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt?                    @db.UnsignedBigInt
  provider        lead_webhook_logs_provider
  event_type      String?                    @db.VarChar(100)
  request_headers String?                    @db.LongText
  payload         String                     @db.LongText
  is_processed    Boolean?                   @default(false)
  error_message   String?                    @db.Text
  created_at      DateTime                   @default(now()) @db.Timestamp(0)
}

model leads {
  id                     BigInt    @id @default(autoincrement())
  name                   String?   @db.VarChar(150)
  mobile                 String    @db.VarChar(20)
  alternate_mobile       String?   @db.VarChar(20)
  email                  String?   @db.VarChar(150)
  city                   String?   @db.VarChar(100)
  state                  String?   @db.VarChar(255)
  country                String?   @db.VarChar(100)
  organization_id        BigInt
  institute_id           BigInt?   @db.UnsignedBigInt
  programme_id           BigInt?   @db.UnsignedBigInt
  faculty_id             BigInt?   @db.UnsignedBigInt
  application_form_id    Int?
  lead_source_id         BigInt?
  lead_campaign_id       BigInt?
  lead_marketing_event   Int?
  pipeline_id            BigInt?
  stage_id               BigInt?
  type_id                BigInt?
  lead_status_id         BigInt?
  lead_sub_status_id     BigInt?
  lead_score             Int?      @default(0)
  lead_weight_count      Int?      @default(0)
  lead_assign_to         BigInt?
  created_by             BigInt?
  next_followup_at       DateTime? @db.DateTime(0)
  lead_registration_date DateTime? @db.DateTime(0)
  extra_fields_json      String?   @db.LongText
  created_at             DateTime? @db.DateTime(0)
  updated_at             DateTime? @db.DateTime(0)
  password               String?   @db.VarChar(255)
}

model marketing_events {
  id              Int         @id @default(autoincrement()) @db.UnsignedInt
  name            String      @db.VarChar(255)
  description     String      @db.VarChar(255)
  date            DateTime    @db.Date
  created_at      DateTime?   @db.Timestamp(0)
  updated_at      DateTime?   @db.Timestamp(0)
  organization_id Int         @default(0)
  campaigns       campaigns[]
}

model message_templates {
  id              BigInt                   @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt                   @db.UnsignedBigInt
  created_by      BigInt                   @db.UnsignedBigInt
  send_by         String?                  @db.VarChar(50)
  title           String?                  @db.VarChar(255)
  category        String?                  @db.VarChar(100)
  message         String                   @db.LongText
  variables_json  String?                  @db.LongText
  editable        Boolean                  @default(true)
  sent_count      Int                      @default(0) @db.UnsignedInt
  status          message_templates_status @default(active)
  created_at      DateTime?                @default(now()) @db.Timestamp(0)
  updated_at      DateTime?                @default(now()) @db.Timestamp(0)
}

model migrations {
  id        Int    @id @default(autoincrement()) @db.UnsignedInt
  migration String @db.VarChar(255)
  batch     Int
}

model notifications {
  id              BigInt             @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt             @db.UnsignedBigInt
  user_id         BigInt             @db.UnsignedBigInt
  type            notifications_type @default(alert)
  title           String             @db.VarChar(255)
  body            String?            @db.Text
  url             String?            @db.VarChar(500)
  is_read         Int                @default(0) @db.TinyInt
  read_at         DateTime?          @db.Timestamp(0)
  ref_type        String?            @db.VarChar(100)
  ref_id          BigInt?            @db.UnsignedBigInt
  created_at      DateTime?          @db.Timestamp(0)
  updated_at      DateTime?          @db.Timestamp(0)

  @@index([is_read], map: "idx_notifications_is_read")
  @@index([organization_id], map: "idx_notifications_org")
  @@index([type], map: "idx_notifications_type")
  @@index([user_id], map: "idx_notifications_user")
}

model org_activity_logs {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt?   @db.UnsignedBigInt
  user_id         BigInt?   @db.UnsignedBigInt
  entity_type     String?   @db.VarChar(255)
  entity_id       BigInt?   @db.UnsignedBigInt
  action          String?   @db.VarChar(255)
  description     String?   @db.Text
  meta_data       String?   @db.LongText
  created_at      DateTime? @default(now()) @db.Timestamp(0)
}

model organizations {
  id         Int      @id @default(autoincrement())
  name       String?  @db.VarChar(255)
  email      String?  @db.VarChar(255)
  mobile     String?  @db.VarChar(255)
  address    String?  @db.VarChar(255)
  city       String?  @db.VarChar(255)
  state      String?  @db.VarChar(255)
  zipcode    String?  @db.VarChar(255)
  country    String?  @db.VarChar(255)
  status     Int      @default(1)
  created_at DateTime @default(now()) @db.DateTime(0)
  logo       String?  @db.VarChar(255)
  gst        String?  @db.VarChar(255)
  created_by Int      @default(0)
}

model otp_verifications {
  id              BigInt                 @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt                 @db.UnsignedBigInt
  type            otp_verifications_type
  recipient       String                 @db.VarChar(150)
  otp_code        String                 @db.VarChar(10)
  expires_at      DateTime               @db.DateTime(0)
  is_verified     Boolean?               @default(false)
  created_at      DateTime?              @db.Timestamp(0)
  updated_at      DateTime?              @db.Timestamp(0)
}

model password_reset_tokens {
  email      String    @id @db.VarChar(255)
  token      String    @db.VarChar(255)
  created_at DateTime? @db.Timestamp(0)
}

model persistences {
  id         Int       @id @default(autoincrement()) @db.UnsignedInt
  user_id    Int       @db.UnsignedInt
  code       String    @unique(map: "persistences_code_unique")
  created_at DateTime? @db.Timestamp(0)
  updated_at DateTime? @db.Timestamp(0)
}

model pipeline_stages {
  id               Int      @id @default(autoincrement()) @db.UnsignedInt
  code             String?  @db.VarChar(255)
  name             String?  @db.VarChar(255)
  probability      Int      @default(0)
  sort_order       Int      @default(0)
  lead_pipeline_id Int      @db.UnsignedInt
  is_final         Int      @default(0)
  created_at       DateTime @default(now()) @db.DateTime(0)
  updated_at       DateTime @default(now()) @db.DateTime(0)

  @@unique([code, lead_pipeline_id], map: "lead_pipeline_stages_code_lead_pipeline_id_unique")
  @@unique([name, lead_pipeline_id], map: "lead_pipeline_stages_name_lead_pipeline_id_unique")
  @@index([lead_pipeline_id], map: "lead_pipeline_stages_lead_pipeline_id_foreign")
}

model pipelines {
  id              Int       @id @default(autoincrement()) @db.UnsignedInt
  name            String    @unique(map: "lead_pipelines_name_unique") @db.VarChar(255)
  is_default      Boolean   @default(false)
  rotten_days     Int       @default(30)
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)
  organization_id Int       @default(0)
}

/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
model product_activities {
  activity_id Int @db.UnsignedInt
  product_id  Int @db.UnsignedInt

  @@index([activity_id], map: "product_activities_activity_id_foreign")
  @@index([product_id], map: "product_activities_product_id_foreign")
  @@ignore
}

model product_inventories {
  id                       Int       @id @default(autoincrement()) @db.UnsignedInt
  in_stock                 Int       @default(0)
  allocated                Int       @default(0)
  product_id               Int       @db.UnsignedInt
  organization_id          Int?      @db.UnsignedInt
  organization_location_id Int?      @db.UnsignedInt
  created_at               DateTime? @db.Timestamp(0)
  updated_at               DateTime? @db.Timestamp(0)

  @@index([product_id], map: "product_inventories_product_id_foreign")
  @@index([organization_id], map: "product_inventories_warehouse_id_foreign")
  @@index([organization_location_id], map: "product_inventories_warehouse_location_id_foreign")
}

/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
model product_tags {
  tag_id     Int @db.UnsignedInt
  product_id Int @db.UnsignedInt

  @@index([product_id], map: "product_tags_product_id_foreign")
  @@index([tag_id], map: "product_tags_tag_id_foreign")
  @@ignore
}

model products {
  id              Int       @id @default(autoincrement()) @db.UnsignedInt
  sku             String    @unique(map: "products_sku_unique") @db.VarChar(255)
  name            String?   @db.VarChar(255)
  description     String?   @db.VarChar(255)
  quantity        Int       @default(0)
  price           Decimal?  @db.Decimal(12, 4)
  created_at      DateTime? @db.Timestamp(0)
  updated_at      DateTime? @db.Timestamp(0)
  organization_id Int       @default(0)
  program_id      BigInt?   @db.UnsignedBigInt
  status          Int       @default(1)
  programs        programs? @relation(fields: [program_id], references: [id], onUpdate: Restrict, map: "products_program_id_fk")

  @@index([program_id], map: "products_program_id_fk")
}

model programs {
  id           BigInt     @id @default(autoincrement()) @db.UnsignedBigInt
  institute_id BigInt     @db.UnsignedBigInt
  name         String     @db.VarChar(255)
  description  String?    @db.Text
  status       Int?       @default(1) @db.TinyInt
  created_at   DateTime?  @db.Timestamp(0)
  updated_at   DateTime?  @db.Timestamp(0)
  products     products[]
}

model registers {
  id                     Int      @id @default(autoincrement())
  user_id                Int
  avatar                 String?  @db.Text
  user_type              String   @db.VarChar(255)
  first_name             String?  @db.VarChar(255)
  last_name              String?  @db.VarChar(255)
  email                  String   @db.VarChar(50)
  mobile                 String?  @db.VarChar(12)
  user_name              String?  @db.VarChar(255)
  address                String?  @db.Text
  notes                  String?  @db.Text
  organization           String?  @db.VarChar(10)
  designation            String?  @db.VarChar(10)
  team                   String?  @db.VarChar(255)
  status                 Int?
  created_at             DateTime @db.DateTime(0)
  updated_at             DateTime @db.DateTime(0)
  is_available_for_leads Int      @default(0)
  role                   String?  @db.VarChar(255)
  other_org              String?  @db.VarChar(255)

  @@index([first_name, last_name, mobile], map: "First_Name")
  @@index([email], map: "email")
  @@index([user_id], map: "user_id")
  @@index([user_id, first_name, last_name, email, mobile], map: "user_id_2")
}

model reminders {
  id           Int       @id @default(autoincrement()) @db.UnsignedInt
  user_id      Int       @db.UnsignedInt
  code         String
  completed    Boolean   @default(false)
  completed_at DateTime? @db.Timestamp(0)
  created_at   DateTime? @db.Timestamp(0)
  updated_at   DateTime? @db.Timestamp(0)

  @@index([user_id], map: "user_id")
}

model role_users {
  user_id    Int       @db.UnsignedInt
  role_id    Int       @db.UnsignedInt
  created_at DateTime? @db.Timestamp(0)
  updated_at DateTime? @db.Timestamp(0)

  @@id([user_id, role_id])
}

model roles {
  id          Int       @id @default(autoincrement()) @db.UnsignedInt
  slug        String    @unique(map: "roles_slug_unique")
  name        String
  permissions String?   @db.Text
  created_at  DateTime? @db.Timestamp(0)
  updated_at  DateTime? @db.Timestamp(0)
}

model sessions {
  id            String  @id @db.VarChar(255)
  user_id       BigInt? @db.UnsignedBigInt
  ip_address    String? @db.VarChar(45)
  user_agent    String? @db.Text
  payload       String  @db.LongText
  last_activity Int

  @@index([last_activity], map: "sessions_last_activity_index")
  @@index([user_id], map: "sessions_user_id_index")
}

model sms_logs {
  id                   BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  communication_log_id BigInt?
  organization_id      BigInt    @db.UnsignedBigInt
  lead_id              BigInt?   @db.UnsignedBigInt
  mobile               String    @db.VarChar(20)
  message              String    @db.Text
  provider             String?   @default("demo") @db.VarChar(255)
  provider_message_id  String?   @db.VarChar(100)
  status               String?   @default("pending") @db.VarChar(20)
  response_json        String?   @db.Text
  sent_by              BigInt?   @db.UnsignedBigInt
  created_at           DateTime? @default(now()) @db.Timestamp(0)
  updated_at           DateTime? @db.Timestamp(0)
  full_url             String?   @db.Text
  attempts             Int       @default(0)
  sent_at              DateTime? @db.DateTime(0)
  last_attempt_at      DateTime? @db.DateTime(0)
}

model sms_settings {
  id              BigInt                    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt?                   @db.UnsignedBigInt
  provider        String?                   @db.VarChar(50)
  api_key         String?                   @db.Text
  sender_id       String?                   @db.VarChar(20)
  route           String?                   @db.VarChar(20)
  status          Int?                      @default(1) @db.TinyInt
  created_at      DateTime?                 @db.Timestamp(0)
  updated_at      DateTime?                 @db.Timestamp(0)
  api_url         String?                   @db.VarChar(255)
  http_method     sms_settings_http_method? @default(GET)
  mobile_param    String?                   @db.VarChar(50)
  message_param   String?                   @db.VarChar(50)
  extra_params    String?                   @db.Text
}

model states {
  id         Int     @id @default(autoincrement())
  country_id Int     @default(0)
  name       String? @db.VarChar(255)
  created_at Int     @default(dbgenerated("(current_timestamp())"))
}

model tags {
  id              Int      @id @default(autoincrement())
  name            String?  @db.VarChar(255)
  organization_id Int      @default(0)
  created_at      DateTime @default(now()) @db.DateTime(0)
  created_by      Int      @default(0)
  color           String?  @db.VarChar(255)
}

model teams {
  id              Int      @id @default(autoincrement())
  name            String?  @db.VarChar(255)
  organization_id Int      @default(0)
  created_at      DateTime @default(now()) @db.DateTime(0)
  status          Int      @default(0)
  created_by      Int      @default(0)
  head            Int      @default(0)
  team_member     String?  @db.Text
  updated_at      DateTime @default(now()) @db.DateTime(0)
}

model throttle {
  id         Int       @id @default(autoincrement()) @db.UnsignedInt
  user_id    Int?      @db.UnsignedInt
  type       String
  ip         String?
  created_at DateTime? @db.DateTime(0)
  updated_at DateTime? @db.DateTime(0)

  @@index([user_id], map: "throttle_user_id_index")
}

model user_activity_logs {
  id              BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt?   @db.UnsignedBigInt
  user_id         BigInt?   @db.UnsignedBigInt
  entity_type     String?   @db.VarChar(100)
  entity_id       BigInt?   @db.UnsignedBigInt
  action          String?   @db.VarChar(100)
  description     String?   @db.Text
  meta_data       String?   @db.LongText
  ip_address      String?   @db.VarChar(50)
  device          String?   @db.Text
  browser         String?   @db.Text
  os              String?   @db.Text
  created_at      DateTime? @default(now()) @db.Timestamp(0)
}

model users {
  id          Int       @id @default(autoincrement()) @db.UnsignedInt
  email       String    @unique(map: "users_email_unique")
  password    String
  permissions String?   @db.Text
  last_login  DateTime? @db.Timestamp(0)
  first_name  String?
  last_name   String?
  location    String?   @db.VarChar(255)
  created_at  DateTime? @db.DateTime(0)
  updated_at  DateTime? @db.DateTime(0)
  status      Int?      @default(1)

  @@index([email, first_name, last_name], map: "email")
  @@index([first_name, last_name, location(length: 191)], map: "first_name")
}

model web_form_attributes {
  id            Int      @id @default(autoincrement()) @db.UnsignedInt
  name          String?  @db.VarChar(255)
  placeholder   String?  @db.VarChar(255)
  is_required   Boolean  @default(false)
  is_hidden     Boolean  @default(false)
  sort_order    Int?     @default(0)
  web_form_id   Int      @default(0) @db.UnsignedInt
  type          String?  @db.VarChar(255)
  options       String?  @db.VarChar(255)
  default_value String?  @db.Text
  updated_at    DateTime @default(now()) @db.DateTime(0)
  created_at    DateTime @default(now()) @db.DateTime(0)
  form_id       String?  @db.VarChar(255)
}

model web_forms {
  id                       Int       @id @default(autoincrement()) @db.UnsignedInt
  form_id                  String    @db.VarChar(255)
  title                    String    @db.VarChar(255)
  description              String?   @db.Text
  submit_button_label      String    @db.Text
  submit_success_action    String    @db.VarChar(255)
  submit_success_content   String    @db.VarChar(255)
  create_lead              Boolean   @default(false)
  background_color         String?   @db.VarChar(255)
  form_background_color    String?   @db.VarChar(255)
  form_title_color         String?   @db.VarChar(255)
  form_submit_button_color String?   @db.VarChar(255)
  attribute_label_color    String?   @db.VarChar(255)
  created_at               DateTime? @db.Timestamp(0)
  updated_at               DateTime? @db.Timestamp(0)
  organization_id          Int       @default(0)
  view_count               Int       @default(0)
  submit_count             Int       @default(0)
  lead_source_id           Int       @default(0)
  lead_campaign_id         Int       @default(0)
  pipeline_id              Int       @default(0)
  type_id                  Int       @default(0)
  attr_programme_check     String?   @db.VarChar(255)
  extra_fields_json        String?   @db.Text
  created_by               Int       @default(0)
  application_form_id      Int?
}

model webhooks {
  id               BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  name             String    @db.VarChar(255)
  entity_type      String    @db.VarChar(255)
  description      String?   @db.VarChar(255)
  method           String    @db.VarChar(255)
  end_point        String    @db.VarChar(255)
  query_params     String?   @db.LongText
  headers          String?   @db.LongText
  payload_type     String    @db.VarChar(255)
  raw_payload_type String    @db.VarChar(255)
  payload          String?   @db.LongText
  created_at       DateTime? @db.Timestamp(0)
  updated_at       DateTime? @db.Timestamp(0)
  organization_id  Int       @default(0)
}

model whatsapp_logs {
  id                   BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  communication_log_id BigInt?
  organization_id      BigInt    @default(0) @db.UnsignedBigInt
  lead_id              BigInt?   @db.UnsignedBigInt
  mobile               String?   @db.VarChar(20)
  template_id          String?   @db.VarChar(100)
  message              String?   @db.Text
  media_url            String?   @db.Text
  provider             String?   @default("demo") @db.VarChar(50)
  provider_message_id  String?   @db.VarChar(100)
  status               String?   @default("pending") @db.VarChar(20)
  response_json        String?   @db.Text
  sent_by              BigInt?   @db.UnsignedBigInt
  created_at           DateTime? @default(now()) @db.Timestamp(0)
  updated_at           DateTime  @default(now()) @db.DateTime(0)
  attempts             Int       @default(0)
  sent_at              DateTime? @db.DateTime(0)
  last_attempt_at      DateTime? @db.DateTime(0)
}

model whatsapp_settings {
  id                 BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id    BigInt    @db.UnsignedBigInt
  provider           String?   @default("demo") @db.VarChar(50)
  api_key            String?   @db.Text
  sender_number      String?   @db.VarChar(30)
  template_namespace String?   @db.VarChar(100)
  status             Int?      @default(1) @db.TinyInt
  created_at         DateTime? @default(now()) @db.Timestamp(0)
  updated_at         DateTime? @default(now()) @db.Timestamp(0)
  provider_url       String?   @db.VarChar(255)
  username           String?   @db.VarChar(255)
  password           String?   @db.VarChar(255)
}

model whatsapp_templates {
  id              BigInt                    @id @default(autoincrement()) @db.UnsignedBigInt
  organization_id BigInt                    @db.UnsignedBigInt
  created_by      BigInt                    @db.UnsignedBigInt
  send_by         String?                   @db.VarChar(50)
  title           String                    @db.VarChar(255)
  category        String?                   @db.VarChar(100)
  message         String                    @db.LongText
  variables_json  String?                   @db.LongText
  editable        Boolean                   @default(true)
  sent_count      Int                       @default(0) @db.UnsignedInt
  status          whatsapp_templates_status @default(active)
  created_at      DateTime?                 @default(now()) @db.Timestamp(0)
  updated_at      DateTime?                 @default(now()) @db.Timestamp(0)
}

enum otp_verifications_type {
  email
  mobile
}

enum lead_incoming_raw_provider {
  facebook
  instagram
  google
}

enum lead_integration_credentials_provider {
  facebook
  instagram
  google
}

enum lead_webhook_logs_provider {
  facebook
  instagram
  google
}

enum lead_integrations_provider {
  facebook
  instagram
  google
}

enum lead_query_messages_sender_type {
  student
  admin
}

enum lead_communication_logs_direction {
  inbound
  outbound
}

enum lead_distribution_rule_items_assign_type {
  team
  user
  designation
}

enum lead_distribution_rules_distribution_type {
  random
  source
}

enum notifications_type {
  message
  alert
}

enum lead_queries_category {
  payment
  technical
  academic
  general
  other
}

enum coupons_type {
  flat
  percent
}

enum lead_applications_payment_status {
  pending
  paid
  failed
}

enum application_forms_status {
  active   @map("1")
  inactive @map("0")
}

enum lead_queries_priority {
  low
  medium
  high
  urgent
}

enum lead_queries_status {
  open
  in_progress
  resolved
  closed
  reopened
}

enum lead_queries_created_by {
  student
  admin
}

enum coupons_usage_type {
  single
  multiple
}

enum automation_raw_leads_status {
  pending
  whatsapp_sent
  ivr_sent
  confirmed
  rejected
  ivr_failed
}

enum communication_logs_status {
  pending
  sent
  failed
}

enum sms_settings_http_method {
  GET
  POST
}

enum whatsapp_templates_status {
  active
  inactive
}

enum message_templates_status {
  active
  inactive
}

enum email_templates_status {
  active
  inactive
}
