// This is your Prisma schema file,
// learn more about it in the docs: <https://pris.ly/d/prisma-schema>

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: <https://pris.ly/cli/accelerate-init>

datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL")
  relationMode = "prisma"
}

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

model User {
  id                 String            @id
  email              String            @unique
  name               String?
  prompts            Prompt[]
  createdAt          DateTime          @default(now())
  updatedAt          DateTime          @updatedAt
  credits            Int               @default(5)
  subscritpion       UserSubscription? @relation
  userSubscriptionId String?
  profile            Profile?
  isActiveSubscriber Boolean           @default(false) // New field to indicate active subscription status
  subscriptionType   SubscriptionType? // New field for subscription type
}

enum SubscriptionType {
  FREE
  BASIC
  STANDARD
  PREMIUM
  LEGACY // Represents users who subscribed under the old unlimited plan
}

model Profile {
  id                     String  @id @default(uuid())
  userId                 String  @unique
  name                   String?
  imageUrl               String? @db.Text
  email                  String? @db.Text
  bio                    String? @db.Text
  twitch                 String? @db.Text
  youtube                String? @db.Text
  instagram              String? @db.Text
  twitter                String? @db.Text
  status                 String? @default("active")
  isPublic               Boolean @default(false)
  stripeConnectAccountId String? // Add this line

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

  user User? @relation(fields: [userId], references: [id])
}

model Prompt {
  id         String    @id @default(cuid())
  content    String    @db.Text
  framework  Framework
  user       User      @relation(fields: [userId], references: [id], onDelete: Cascade)
  userId     String
  isArchived Boolean   @default(false)
  createdAt  DateTime  @default(now())
  updatedAt  DateTime  @updatedAt

  @@index([userId])
}

model UserSubscription {
  id                     String    @id @default(cuid())
  userId                 String    @unique
  stripeCustomerId       String?   @unique @map(name: "stripe_customer_id")
  stripeSubscriptionId   String?   @unique @map(name: "stripe_subscription_id")
  stripePriceId          String?   @map(name: "stripe_price_id")
  stripeCurrentPeriodEnd DateTime? @map(name: "stripe_current_period_end")
  createdAt              DateTime  @default(now())
  updatedAt              DateTime? @updatedAt
  name                   String?
  email                  String?
  credits                Int       @default(0) // New credits field
  user                   User?     @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction)
}

model UserApiLimit {
  id        String   @id @default(cuid())
  userId    String   @unique
  count     Int      @default(0)
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

enum Framework {
  RTF
  TAG
  BAB
  CARE
  RISE
}