/**
 * Drizzle relations for baseline-proven-hot aggregates only.
 *
 * Scope (Task 7): deals↔vendors↔categories↔tags, cart↔lines↔deals,
 * orders↔lines, vendor-dashboard joins — NOT all 134 tables.
 */

import { relations } from 'drizzle-orm';

import { users, vendors, vendorAddresses, dealCategories, dealTags } from './core.js';
import { deals, dealSkus, dealImages, dealTagAssignments, dealDrafts } from './deal-variants.js';
import { cart, cartLine, cartItems } from './cart.js';
import { order, orderLine } from './orders.js';

// ─── Catalog (deals listing / detail) ────────────────────────────────────────

export const vendorsRelations = relations(vendors, ({ one, many }) => ({
  owner: one(users, { fields: [vendors.ownerUserId], references: [users.id] }),
  deals: many(deals),
  addresses: many(vendorAddresses),
  dealDrafts: many(dealDrafts),
}));

export const dealCategoriesRelations = relations(dealCategories, ({ many }) => ({
  deals: many(deals),
}));

export const dealTagsRelations = relations(dealTags, ({ many }) => ({
  assignments: many(dealTagAssignments),
}));

export const dealsRelations = relations(deals, ({ one, many }) => ({
  vendor: one(vendors, { fields: [deals.vendorId], references: [vendors.id] }),
  category: one(dealCategories, {
    fields: [deals.categoryId],
    references: [dealCategories.id],
  }),
  skus: many(dealSkus),
  images: many(dealImages),
  tagAssignments: many(dealTagAssignments),
}));

export const dealSkusRelations = relations(dealSkus, ({ one }) => ({
  deal: one(deals, { fields: [dealSkus.dealId], references: [deals.id] }),
}));

export const dealImagesRelations = relations(dealImages, ({ one }) => ({
  deal: one(deals, { fields: [dealImages.dealId], references: [deals.id] }),
}));

export const dealTagAssignmentsRelations = relations(dealTagAssignments, ({ one }) => ({
  deal: one(deals, { fields: [dealTagAssignments.dealId], references: [deals.id] }),
  tag: one(dealTags, { fields: [dealTagAssignments.tagId], references: [dealTags.id] }),
}));

export const vendorAddressesRelations = relations(vendorAddresses, ({ one }) => ({
  vendor: one(vendors, { fields: [vendorAddresses.vendorId], references: [vendors.id] }),
}));

// ─── Cart (cart / checkout hot paths) ────────────────────────────────────────

export const cartRelations = relations(cart, ({ many }) => ({
  lines: many(cartLine),
}));

export const cartLineRelations = relations(cartLine, ({ one }) => ({
  cart: one(cart, { fields: [cartLine.cartId], references: [cart.id] }),
  sku: one(dealSkus, { fields: [cartLine.variantId], references: [dealSkus.id] }),
}));

export const cartItemsRelations = relations(cartItems, ({ one }) => ({
  user: one(users, { fields: [cartItems.userId], references: [users.id] }),
  dealSku: one(dealSkus, { fields: [cartItems.dealSkuId], references: [dealSkus.id] }),
}));

// ─── Orders (checkout / purchases hot paths) ─────────────────────────────────

export const orderRelations = relations(order, ({ many }) => ({
  lines: many(orderLine),
}));

export const orderLineRelations = relations(orderLine, ({ one }) => ({
  order: one(order, { fields: [orderLine.orderId], references: [order.id] }),
}));

// ─── Vendor dashboard ──────────────────────────────────────────────────────────

export const dealDraftsRelations = relations(dealDrafts, ({ one }) => ({
  vendor: one(vendors, { fields: [dealDrafts.vendorId], references: [vendors.id] }),
}));
