// src/server/features/reference_books/db/external_access.table.ts
// External access credentials table schema for tracking external service access

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

export const externalAccess = mysqlTable('external_access', {
  id: varchar('id', { length: 36 }).primaryKey().$defaultFn(() => randomUUID()),
  resourceName: varchar('resource_name', { length: 100 }).notNull(), // Название ресурса
  link: varchar('link', { length: 500 }).notNull(), // Ссылка
  login: varchar('login', { length: 100 }).notNull(), // Логин
  password: varchar('password', { length: 100 }).notNull(), // Пароль
  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 externalAccessPending = mysqlTable('external_access_pending', {
  id: varchar('id', { length: 36 }).primaryKey().$defaultFn(() => randomUUID()),
  resourceName: varchar('resource_name', { length: 100 }).notNull(),
  link: varchar('link', { length: 500 }).notNull(),
  login: varchar('login', { length: 100 }).notNull(),
  password: varchar('password', { length: 100 }).notNull(),
  comment: text('comment'),
  status: varchar('status', { length: 20 }).notNull().default('pending'), // pending, approved, rejected, to_delete
  targetId: varchar('target_id', { length: 36 }), // ID оригинальной записи в таблице external_access
  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(),
});
