/**
 * Drizzle ORM schema - Multideal (מולטידיל) database
 *
 * All 13 FDS data models + supporting tables.
 * snake_case column names (enforced by drizzle.config.ts casing: 'snake_case').
 * Every timestamp uses { withTimezone: true }.
 * Every enum uses pgEnum.
 *
 * PII columns (phone, email, address, token) are stored as encrypted text via pgcrypto.
 * Blind-index columns provide deterministic lookup without decryption.
 */

import {
  pgTable,
  text,
  boolean,
  integer,
  timestamp,
  index,
  uniqueIndex,
} from 'drizzle-orm/pg-core';
import { sql } from 'drizzle-orm';

// ─── i18n: Languages ─────────────────────────────────────────────────────────

export const languages = pgTable(
  'languages',
  {
    code: text('code').primaryKey(),
    nameNative: text('name_native').notNull(),
    nameEnglish: text('name_english').notNull(),
    direction: text('direction').notNull(), // 'rtl' | 'ltr'
    searchConfig: text('search_config').notNull(), // 'english' | 'simple' (Postgres regconfig)
    isActive: boolean('is_active').notNull().default(true),
    isDefault: boolean('is_default').notNull().default(false),
    sortOrder: integer('sort_order').notNull().default(0),
    createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
    updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
  },
  (t) => [
    uniqueIndex('languages_one_default_idx')
      .on(t.isDefault)
      .where(sql`${t.isDefault} = true`),
    index('languages_active_sort_idx').on(t.isActive, t.sortOrder),
  ],
);
export type Language = typeof languages.$inferSelect;
export type NewLanguage = typeof languages.$inferInsert;
