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

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

model User {
  id              String   @id @default(cuid())
  email           String   @unique
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt

  subscription    Subscription?
  telegramAccount TelegramAccount?
  alerts          AlertSubscription[]
  deliveries      AlertDelivery[]
  linkTokens      TelegramLinkToken[]
}

model Subscription {
  id                   String   @id @default(cuid())
  userId               String   @unique
  tier                 String   @default("free") // free | pro | plus
  polarSubscriptionId  String?  @unique
  createdAt            DateTime @default(now())
  updatedAt            DateTime @updatedAt
  canceledAt           DateTime?

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

model TelegramAccount {
  id          String   @id @default(cuid())
  userId      String   @unique
  telegramId  String   @unique
  username    String?
  linkedAt    DateTime @default(now())

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

model TelegramLinkToken {
  id         String   @id @default(cuid())
  token      String   @unique
  userId     String
  expiresAt  DateTime
  createdAt  DateTime @default(now())

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

  @@index([userId])
}

model AuthMagicToken {
  id         String   @id @default(cuid())
  token      String   @unique
  email      String
  expiresAt  DateTime
  consumedAt DateTime?
  createdAt  DateTime @default(now())

  @@index([email])
  @@index([expiresAt])
}

model AlertSubscription {
  id        String   @id @default(cuid())
  userId    String
  kind      String   // liquidation | whale | smart_money | token_unlock
  params    Json
  enabled   Boolean  @default(true)
  createdAt DateTime @default(now())

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

  @@index([kind, enabled])
  @@index([userId])
}

model AlertDelivery {
  id         String   @id @default(cuid())
  userId     String
  alertKind  String
  payload    Json
  deliveredAt DateTime @default(now())

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

  @@index([userId, deliveredAt])
}

model WatchedWallet {
  id        String   @id @default(cuid())
  chain     String   // hyperliquid | solana | ethereum | base
  address   String
  label     String?
  tier      String   @default("curated") // curated | user
  isActive  Boolean  @default(true)
  createdAt DateTime @default(now())

  @@unique([chain, address])
  @@index([chain, isActive])
}

model WaitlistEntry {
  id        String   @id @default(cuid())
  email     String   @unique
  source    String?
  createdAt DateTime @default(now())

  @@index([source, createdAt])
}
