/**
 * 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 { pgEnum } from 'drizzle-orm/pg-core';
import { DEAL_TYPES } from '@/lib/deal-types';
import { DEAL_STATE } from '@/lib/enums/deal-state';
import { PAYMENT_BRAND } from '@/lib/enums/payment-brand';
import { AVATAR_TYPE } from '@/lib/enums/avatar-type';
import { SCAN_STATUS } from '@/lib/enums/scan-status';
import { GROUP_DEAL_STATE } from '@/lib/enums/group-deal-state';
import { FILL_RULE } from '@/lib/enums/fill-rule';
import { CANCELLATION_POLICY } from '@/lib/enums/cancellation-policy';
import { RETURN_STATUS } from '@/lib/enums/return-status';
import { UPLOAD_PURPOSE } from '@/lib/enums/upload-purpose';
import { ACCOUNT_STATE_VENDOR } from '@/lib/enums/account-state-vendor';
import { VENDOR_TIER } from '@/lib/enums/vendor-tier';
import { LLM_PROVIDER_TYPE } from '@/lib/enums/llm-provider-type';
import { SUPPORT_OPENER_ROLE } from '@/lib/enums/support-opener-role';
import {
  ACCOUNT_STATE_USER,
  ADMIN_ACTION,
  ADMIN_TARGET_TYPE,
  AI_DECISION,
  AI_INTERVENTION_DECISION,
  APPEAL_STATUS,
  APPROVED_BY,
  CASE_OFFER_BY,
  CASE_OFFER_OUTCOME,
  CASE_OFFER_STATUS,
  CASE_RESOLUTION_EXECUTOR,
  EMAIL_VERIFICATION_PURPOSE,
  IMAGE_APPROVAL_STATUS,
  IMAGE_ENTITY_TYPE,
  LLM_DECISION,
  LLM_JOB_STATUS,
  LLM_JOB_TYPE,
  LLM_TARGET_TYPE,
  NOTIFICATION_SEVERITY,
  PERSONAL_DEAL_STATUS,
  REMOVAL_STATUS,
  REMOVED_BY,
  REPORT_REASON,
  REPORT_STATUS,
  REPORT_TARGET_TYPE,
  RESERVATION_STATUS,
  RETURN_LIABILITY,
  RETURN_REASON,
  REVIEW_REMOVAL_QUEUE_STATUS,
  REVIEW_TYPE,
  SENDER_TYPE,
  SUPPORT_ATTACHMENT_ABUSE_STATUS,
  SUPPORT_CASE_CATEGORY,
  SUPPORT_CASE_STATUS,
  SUPPORT_KB_CATEGORY,
  SUPPORT_KB_VISIBILITY,
  SUPPORT_MESSAGE_AUTHOR_TYPE,
  SUPPORT_MESSAGE_VISIBILITY,
  SUPPORT_PARENT_TYPE,
  SUPPORT_PRIORITY,
  SUPPORT_TICKET_CATEGORY,
  SUPPORT_TICKET_STATUS,
} from '@/lib/enums/schema-enums';

// ─── Enums ───────────────────────────────────────────────────────────────────

export const avatarTypeEnum = pgEnum('avatar_type', AVATAR_TYPE);

export const accountStateUserEnum = pgEnum('account_state_user', ACCOUNT_STATE_USER);

export const paymentBrandEnum = pgEnum('payment_brand', PAYMENT_BRAND);

export const accountStateVendorEnum = pgEnum('account_state_vendor', ACCOUNT_STATE_VENDOR);

export const vendorTierEnum = pgEnum('vendor_tier', VENDOR_TIER);

export const dealTypeEnum = pgEnum('deal_type', DEAL_TYPES);

export const dealStateEnum = pgEnum('deal_state', DEAL_STATE);

export const llmJobTypeEnum = pgEnum('llm_job_type', LLM_JOB_TYPE);

export const llmJobStatusEnum = pgEnum('llm_job_status', LLM_JOB_STATUS);

export const llmDecisionEnum = pgEnum('llm_decision', LLM_DECISION);

export const llmTargetTypeEnum = pgEnum('llm_target_type', LLM_TARGET_TYPE);

export const llmProviderTypeEnum = pgEnum('llm_provider_type', LLM_PROVIDER_TYPE);

export const appealStatusEnum = pgEnum('appeal_status', APPEAL_STATUS);

export const approvedByEnum = pgEnum('approved_by', APPROVED_BY);

export const imageApprovalStatusEnum = pgEnum('image_approval_status', IMAGE_APPROVAL_STATUS);

export const reviewTypeEnum = pgEnum('review_type', REVIEW_TYPE);

export const removalStatusEnum = pgEnum('removal_status', REMOVAL_STATUS);

export const removedByEnum = pgEnum('removed_by', REMOVED_BY);

export const adminTargetTypeEnum = pgEnum('admin_target_type', ADMIN_TARGET_TYPE);

export const uploadPurposeEnum = pgEnum('upload_purpose', UPLOAD_PURPOSE);

export const imageEntityTypeEnum = pgEnum('image_entity_type', IMAGE_ENTITY_TYPE);

export const aiDecisionEnum = pgEnum('ai_decision', AI_DECISION);

export const notificationSeverityEnum = pgEnum('notification_severity', NOTIFICATION_SEVERITY);

export const adminActionEnum = pgEnum('admin_action', ADMIN_ACTION);

export const senderTypeEnum = pgEnum('sender_type', SENDER_TYPE);

export const scanStatusEnum = pgEnum('scan_status', SCAN_STATUS);

export const personalDealStatusEnum = pgEnum('personal_deal_status', PERSONAL_DEAL_STATUS);

export const reportTargetTypeEnum = pgEnum('report_target_type', REPORT_TARGET_TYPE);

export const reportReasonEnum = pgEnum('report_reason', REPORT_REASON);

export const reportStatusEnum = pgEnum('report_status', REPORT_STATUS);

export const reviewRemovalQueueStatusEnum = pgEnum(
  'review_removal_queue_status',
  REVIEW_REMOVAL_QUEUE_STATUS,
);

export const groupDealStateEnum = pgEnum('group_deal_state', GROUP_DEAL_STATE);

export const reservationStatusEnum = pgEnum('reservation_status', RESERVATION_STATUS);

export const fillRuleEnum = pgEnum('fill_rule', FILL_RULE);

export const cancellationPolicyEnum = pgEnum('cancellation_policy', CANCELLATION_POLICY);

// ─── Support System Enums ─────────────────────────────────────────────────────

export const supportParentTypeEnum = pgEnum('support_parent_type', SUPPORT_PARENT_TYPE);
export const supportOpenerRoleEnum = pgEnum('support_opener_role', SUPPORT_OPENER_ROLE);

// ─── Returns / RMA Enums ──────────────────────────────────────────────────────

export const returnStatusEnum = pgEnum('return_status', RETURN_STATUS);
export const returnReasonEnum = pgEnum('return_reason', RETURN_REASON);
export const returnLiabilityEnum = pgEnum('return_liability', RETURN_LIABILITY);
export const supportTicketCategoryEnum = pgEnum('support_ticket_category', SUPPORT_TICKET_CATEGORY);
export const supportTicketStatusEnum = pgEnum('support_ticket_status', SUPPORT_TICKET_STATUS);
export const supportPriorityEnum = pgEnum('support_priority', SUPPORT_PRIORITY);
export const supportCaseCategoryEnum = pgEnum('support_case_category', SUPPORT_CASE_CATEGORY);
export const supportCaseStatusEnum = pgEnum('support_case_status', SUPPORT_CASE_STATUS);
export const caseOfferOutcomeEnum = pgEnum('case_offer_outcome', CASE_OFFER_OUTCOME);
export const caseOfferByEnum = pgEnum('case_offer_by', CASE_OFFER_BY);
export const caseOfferStatusEnum = pgEnum('case_offer_status', CASE_OFFER_STATUS);
export const caseResolutionExecutorEnum = pgEnum(
  'case_resolution_executor',
  CASE_RESOLUTION_EXECUTOR,
);
export const supportMessageAuthorTypeEnum = pgEnum(
  'support_message_author_type',
  SUPPORT_MESSAGE_AUTHOR_TYPE,
);
export const supportMessageVisibilityEnum = pgEnum(
  'support_message_visibility',
  SUPPORT_MESSAGE_VISIBILITY,
);
export const supportAttachmentAbuseStatusEnum = pgEnum(
  'support_attachment_abuse_status',
  SUPPORT_ATTACHMENT_ABUSE_STATUS,
);
export const aiInterventionDecisionEnum = pgEnum(
  'ai_intervention_decision',
  AI_INTERVENTION_DECISION,
);
export const supportKbCategoryEnum = pgEnum('support_kb_category', SUPPORT_KB_CATEGORY);
export const supportKbVisibilityEnum = pgEnum('support_kb_visibility', SUPPORT_KB_VISIBILITY);

export const emailVerificationPurposeEnum = pgEnum(
  'email_verification_purpose',
  EMAIL_VERIFICATION_PURPOSE,
);
