// src/server/features/blacklist/db/blacklist.table.ts
// Blacklist table schema for tracking unwanted guests with approval workflow

import { mysqlTable, varchar, text, timestamp, boolean } from 'drizzle-orm/mysql-core';
import { randomUUID } from 'node:crypto';

export const blacklist = mysqlTable('blacklist', {
  id: varchar('id', { length: 36 }).primaryKey().$defaultFn(() => randomUUID()),
  name: varchar('name', { length: 100 }).notNull(), // ФИО гостя
  phone: varchar('phone', { length: 20 }).notNull(), // Телефон
  bookingEngineCheck: varchar('booking_engine_check', { length: 20, enum: ['YES', 'NO'] }).notNull().default('NO'), // Проверка в Booking Engine
  comment: text('comment'), // Комментарий
  isApproved: boolean('is_approved').notNull().default(false), // Статус согласования
  createdBy: varchar('created_by', { length: 36 }), // ID пользователя, создавшего запись
  createdAt: timestamp('created_at').notNull().defaultNow(),
  updatedAt: timestamp('updated_at').notNull().defaultNow().onUpdateNow(),
  archivedAt: timestamp('archived_at'), // Soft delete для архивации
});

// Таблица для модерации записей перед попаданием в основной черный список
export const blacklistPending = mysqlTable('blacklist_pending', {
  id: varchar('id', { length: 36 }).primaryKey().$defaultFn(() => randomUUID()),
  name: varchar('name', { length: 100 }).notNull(), // ФИО гостя
  phone: varchar('phone', { length: 20 }).notNull(), // Телефон
  bookingEngineCheck: varchar('booking_engine_check', { length: 20, enum: ['YES', 'NO'] }).notNull().default('NO'), // Проверка в Booking Engine
  comment: text('comment'), // Комментарий
  status: varchar('status', { length: 20 }).notNull().default('pending'), // Статус: pending, approved, rejected, to_delete
  targetId: varchar('target_id', { length: 36 }), // ID оригинальной записи в таблице blacklist (для редактирования)
  createdBy: varchar('created_by', { length: 36 }), // ID пользователя, создавшего запись
  reviewedBy: varchar('reviewed_by', { length: 36 }), // ID пользователя, одобрившего/отклонившего запись
  reviewedAt: timestamp('reviewed_at'), // Время рассмотрения
  rejectionReason: text('rejection_reason'), // Причина отклонения
  createdAt: timestamp('created_at').notNull().defaultNow(),
  updatedAt: timestamp('updated_at').notNull().defaultNow().onUpdateNow(),
});
