model BinomV2Account {
  id Int @id @unique @default(autoincrement())

  apiKey                  String
  costTimezone            String
  trackerUrl              String
  tonicProtectionAdtitles String[]

  trackerAccount   TrackerAccount @relation(fields: [trackerAccountId], references: [id])
  trackerAccountId Int            @unique

  binomV2Campaigns      BinomV2Campaign[]
  binomV2Offers         BinomV2Offer[]
  binomV2TrafficSources BinomV2TrafficSource[]
  binomV2CampaignGroups BinomV2Group[]
  tonicLeads            TonicLead[]
  affNetworks           BinomV2AffNetwork[]
  binomV2Users          BinomV2User[]

  @@map("binom_v2_account")
}

model BinomV2Campaign {
  id Int @id @unique @default(autoincrement())

  externalId     String
  name           String
  isDomainBanned Boolean
  notesUuid      String  @default("")
  notes          String  @default("")

  binomV2Account         BinomV2Account        @relation(fields: [binomV2AccountId], references: [id])
  binomV2AccountId       Int
  binomV2CampaignGroup   BinomV2Group?         @relation(fields: [binomV2CampaignGroupId], references: [id])
  binomV2CampaignGroupId Int?
  binomV2TrafficSource   BinomV2TrafficSource? @relation(fields: [binomV2TrafficSourceId], references: [id])
  binomV2TrafficSourceId Int?

  binomV2CampaignDateStats BinomV2CampaignDateStat[]
  binomV2Offers            BinomV2Offer[]

  @@map("binom_v2_campaign")
}

model BinomV2Offer {
  id Int @id @unique @default(autoincrement())

  externalId Int
  name       String

  binomV2Account      BinomV2Account     @relation(fields: [binomV2AccountId], references: [id])
  binomV2AccountId    Int
  binomV2OfferGroup   BinomV2Group?      @relation(fields: [binomV2OfferGroupId], references: [id])
  binomV2OfferGroupId Int?
  offerId             Int?               @unique
  offer               Offer?             @relation(fields: [offerId], references: [id])
  affNetworkId        Int?
  affNetwork          BinomV2AffNetwork? @relation(fields: [affNetworkId], references: [id])

  binomV2Campaigns BinomV2Campaign[]

  @@map("binom_v2_offer")
}

model BinomV2Group {
  id Int @id @unique @default(autoincrement())

  externalId String
  name       String
  groupType  BinomV2GroupType @default(CAMPAIGN)

  binomV2AccountId Int
  binomV2Account   BinomV2Account @relation(fields: [binomV2AccountId], references: [id])
  binomV2UserId    Int?
  binomV2User      BinomV2User?   @relation(fields: [binomV2UserId], references: [id])

  binomV2Campaigns BinomV2Campaign[]
  binomV2Offers    BinomV2Offer[]

  @@unique([binomV2AccountId, groupType, externalId])
  @@map("binom_v2_group")
}

model BinomV2User {
  id Int @id @default(autoincrement())

  externalId String
  name       String

  user             User?          @relation(fields: [userId], references: [id])
  userId           Int?           @unique
  binomV2AccountId Int
  binomV2Account   BinomV2Account @relation(fields: [binomV2AccountId], references: [id])

  binomV2Groups BinomV2Group[]

  @@unique([externalId, binomV2AccountId])
  @@map("binom_v2_user")
}

model BinomV2TrafficSource {
  id Int @id @unique @default(autoincrement())

  externalId        String
  name              String
  trafficSourceType TrafficSource?

  binomV2AccountId                      Int
  binomV2Account                        BinomV2Account             @relation(fields: [binomV2AccountId], references: [id])
  costUpdateBinomV2TrafficSourceToken   BinomV2TrafficSourceToken? @relation("costUpdateTokenRelation", fields: [costUpdateBinomV2TrafficSourceTokenId], references: [id])
  costUpdateBinomV2TrafficSourceTokenId Int?                       @unique

  binomV2TrafficSourceTokens BinomV2TrafficSourceToken[]
  binomV2Campaigns           BinomV2Campaign[]

  @@map("binom_v2_traffic_source")
}

model BinomV2AffNetwork {
  id Int @id @unique @default(autoincrement())

  externalId Int
  name       String
  provider   Provider?

  binomV2AccountId Int
  binomV2Account   BinomV2Account @relation(fields: [binomV2AccountId], references: [id])

  binomV2Offers BinomV2Offer[]

  @@map("binom_v2_aff_network")
}

model BinomV2TrafficSourceToken {
  id Int @id @unique @default(autoincrement())

  externalId  String
  name        String
  parameter   String
  placeholder String

  binomV2TrafficSource   BinomV2TrafficSource @relation(fields: [binomV2TrafficSourceId], references: [id])
  binomV2TrafficSourceId Int

  costUpdateBinomV2TrafficSource BinomV2TrafficSource? @relation("costUpdateTokenRelation")

  binomV2CampaignDateStats BinomV2CampaignDateStat[]

  @@map("binom_v2_traffic_source_token")
}

model BinomV2CampaignDateStat {
  id Int @id @unique @default(autoincrement())

  clicks    Int
  leads     Int
  cost      Decimal  @default(0) @db.Decimal(18, 2)
  revenue   Decimal  @default(0) @db.Decimal(18, 2)
  tokenName String
  statDate  DateTime

  binomV2Campaign             BinomV2Campaign            @relation(fields: [binomV2CampaignId], references: [id])
  binomV2CampaignId           Int
  binomV2TrafficSourceToken   BinomV2TrafficSourceToken? @relation(fields: [binomV2TrafficSourceTokenId], references: [id])
  binomV2TrafficSourceTokenId Int?

  @@map("binom_v2_campaign_date_stat")
}

enum BinomV2GroupType {
  CAMPAIGN
  OFFER
}
