import { eq, sql } from 'drizzle-orm';
import type { DrizzleClient } from '@/server/db/client.js';
import {
  supportAttachments,
  userGalleryImages,
  users,
  vendorGalleryImages,
  vendors,
} from '@/server/db/schema.js';

export function rejectVendorLogo(db: DrizzleClient, id: string) {
  return db
    .update(vendors)
    .set({ logoApprovalStatus: 'REJECTED', pendingLogoUrl: null, pendingLogoR2Key: null })
    .where(eq(vendors.id, id));
}
export function approveVendorLogo(db: DrizzleClient, id: string) {
  return db.execute(
    sql`UPDATE vendors SET logo_url = pending_logo_url, pending_logo_url = NULL, pending_logo_r2_key = NULL, logo_approval_status = 'APPROVED' WHERE id = ${id}`,
  );
}
export function rejectVendorGallery(db: DrizzleClient, id: string, reason: string) {
  return db
    .update(vendorGalleryImages)
    .set({ approvalStatus: 'REJECTED', rejectReasonCode: reason })
    .where(eq(vendorGalleryImages.id, id));
}
export function approveVendorGallery(db: DrizzleClient, id: string) {
  return db
    .update(vendorGalleryImages)
    .set({ approvalStatus: 'APPROVED' })
    .where(eq(vendorGalleryImages.id, id));
}
export function rejectUserGallery(db: DrizzleClient, id: string, reason: string) {
  return db
    .update(userGalleryImages)
    .set({ approvalStatus: 'REJECTED', rejectReasonCode: reason })
    .where(eq(userGalleryImages.id, id));
}
export function approveUserGallery(db: DrizzleClient, id: string) {
  return db
    .update(userGalleryImages)
    .set({ approvalStatus: 'APPROVED' })
    .where(eq(userGalleryImages.id, id));
}
export function rejectAvatar(db: DrizzleClient, id: string, reason: string) {
  return db
    .update(users)
    .set({
      avatarApprovalStatus: 'REJECTED',
      pendingAvatarValue: null,
      avatarRejectReasonCode: reason,
    })
    .where(eq(users.id, id));
}
export async function approveAvatar(db: DrizzleClient, id: string) {
  const [row] = await db
    .select({ pendingAvatarValue: users.pendingAvatarValue })
    .from(users)
    .where(eq(users.id, id))
    .limit(1);
  if (row?.pendingAvatarValue)
    return db
      .update(users)
      .set({
        avatarValue: row.pendingAvatarValue,
        pendingAvatarValue: null,
        avatarApprovalStatus: 'APPROVED',
        mhVersion: sql`${users.mhVersion} + 1`,
      })
      .where(eq(users.id, id));
}
export function flagSupportAttachment(db: DrizzleClient, id: string) {
  return db
    .update(supportAttachments)
    .set({ abuseStatus: 'flagged' })
    .where(eq(supportAttachments.id, id));
}
