'use client';

import React, { useEffect, useState } from 'react';
import {
  X,
  User,
  Mail,
  Phone,
  Building,
  Shield,
  FileCheck,
  CheckCircle2,
  XCircle,
  Clock,
  Upload,
  Eye,
  Edit3,
  Layers,
  Home,
  GraduationCap,
  CreditCard,
} from 'lucide-react';
import { Button } from '@/components/ui/button';
import { UserPendingApprovalRecord } from '@/services/users/types';
import { useReviewKyc } from '@/services/kyc/queries';
import UploadKycModal from './UploadKycModal';
import EditKycDocumentModal from './EditKycDocumentModal';
import DocumentPreviewModal from '@/components/modals/DocumentPreviewModal';
import Link from 'next/link';
import { useReviewSectorKyc } from '@/services/sectorKyc/queries';
import { useReviewInstituteKyc } from '@/services/instituteKyc/queries';
import { getAssetUrl } from '@/lib/getAssetUrl';

interface DrawerProps {
  user: UserPendingApprovalRecord;
  onClose: () => void;
  onRefresh?: () => void;
}

export default function PendingApprovalManagementDrawer({ user, onClose, onRefresh }: DrawerProps) {
  const [isMounted, setIsMounted] = useState(false);
  const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);
  const [remarks, setRemarks] = useState('');

  // Document Preview Modal State
  const [previewTarget, setPreviewTarget] = useState<{
    name: string;
    url: string;
  } | null>(null);

  // Edit Document Modal State
  const [editTargetDoc, setEditTargetDoc] = useState<{
    id: string;
    type: string;
    name: string;
  } | null>(null);

  const reviewKycMutation = useReviewKyc();
  const reviewSectorKycMutation = useReviewSectorKyc();
  const reviewInstituteKycMutation = useReviewInstituteKyc();

  const [sectorRemarks, setSectorRemarks] = useState<{ [key: string]: string }>({});
  const [instituteRemarks, setInstituteRemarks] = useState<{ [key: string]: string }>({});

  useEffect(() => {
    setIsMounted(true);
    document.body.style.overflow = 'hidden';
    return () => {
      document.body.style.overflow = 'unset';
    };
  }, []);

  const handleSafeClose = () => {
    setIsMounted(false);
    setTimeout(() => {
      onClose();
    }, 250);
  };

  const handleReviewSectorKyc = async (requestId: string, status: 'APPROVED' | 'REJECTED') => {
    const remarkText = sectorRemarks[requestId] || '';
    try {
      await reviewSectorKycMutation.mutateAsync({
        requestId,
        status,
        remarks: remarkText,
        rejectionReason: status === 'REJECTED' ? remarkText || 'Sector agreement verification failed.' : undefined,
      });
      if (onRefresh) onRefresh();
    } catch {
      // Handled by mutation toast
    }
  };

  const handleReviewInstituteKyc = async (requestId: string, status: 'APPROVED' | 'REJECTED') => {
    const remarkText = instituteRemarks[requestId] || '';
    try {
      await reviewInstituteKycMutation.mutateAsync({
        requestId,
        status,
        remarks: remarkText,
        rejectionReason: status === 'REJECTED' ? remarkText || 'Institute agreement verification failed.' : undefined,
      });
      if (onRefresh) onRefresh();
    } catch {
      // Handled by mutation toast
    }
  };

  const handleReviewAction = async (status: 'APPROVED' | 'REJECTED') => {
    if (!user.kycRecord?.id) return;
    try {
      await reviewKycMutation.mutateAsync({
        kycRecordId: user.kycRecord.id,
        status,
        remarks: remarks.trim() || undefined,
        rejectionReason:
          status === 'REJECTED' ? remarks.trim() || 'Verification failed.' : undefined,
      });
      if (onRefresh) onRefresh();
      handleSafeClose();
    } catch {
      // Handled in mutation error toast
    }
  };

  const kycStatus = user.kycRecord?.status || 'PENDING';
  const advisor = user.careerAdvisor;

  return (
    <>
      {/* Backdrop */}
      <div
        className={`fixed inset-0 bg-black/40 backdrop-blur-xs z-40 transition-opacity duration-300 ease-in-out ${
          isMounted ? 'opacity-100' : 'opacity-0'
        }`}
        onClick={handleSafeClose}
      />

      {/* Drawer Container */}
      <div
        className={`fixed right-0 top-0 bottom-0 w-full max-w-xl bg-background border-l border-border shadow-2xl z-50 p-6 flex flex-col justify-between transform transition-transform duration-300 ease-in-out ${
          isMounted ? 'translate-x-0' : 'translate-x-full'
        } select-none`}
      >
        <div className="space-y-5 flex-1 overflow-y-auto pr-1">
          {/* Header */}
          <div className="flex items-center justify-between border-b border-border/10 pb-4">
            <div className="flex items-center gap-2.5">
              <div className="h-9 w-9 rounded-xl bg-primary/10 border border-primary/20 flex items-center justify-center text-sm font-black text-primary">
                {user.firstName ? user.firstName[0] : 'U'}
                {user.lastName ? user.lastName[0] : ''}
              </div>
              <div className="flex flex-col text-left">
                <h2 className="text-sm font-bold text-foreground leading-tight">
                  Identity & Compliance Control
                </h2>
                <span className="text-[10px] text-muted-foreground font-mono">
                  Code: {user.username || user.uuid.slice(0, 8).toUpperCase()}
                </span>
              </div>
            </div>
            <button
              onClick={handleSafeClose}
              className="p-1.5 rounded-lg hover:bg-muted text-muted-foreground/70 hover:text-foreground transition-colors cursor-pointer"
            >
              <X className="h-4 w-4" />
            </button>
          </div>

          {/* Core User Identity Block */}
          <div className="bg-muted/30 border border-border/40 rounded-xl p-3.5 space-y-2 text-left">
            <div className="flex items-center justify-between">
              <div className="flex items-center gap-2 text-xs font-semibold text-foreground">
                <User className="h-3.5 w-3.5 text-muted-foreground/60" />
                <span>
                  {user.firstName} {user.lastName}
                </span>
              </div>
              <div className="flex items-center gap-2">
                <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-muted/50 text-foreground border border-border/40 uppercase">
                  <Shield className="h-3 w-3 text-primary" />
                  {user.role ? user.role.replace(/_/g, ' ') : 'N/A'}
                </span>

                <Link href={`/users/edit/${user.id}`}>
                  <Button
                    variant="outline"
                    size="sm"
                    className="h-7 text-[10px] font-bold gap-1 rounded-lg border-border/60 hover:bg-background shrink-0 cursor-pointer"
                  >
                    <Edit3 className="h-3 w-3" /> Edit Profile
                  </Button>
                </Link>
              </div>
            </div>

            <div className="flex items-center gap-2 text-[11px] font-mono text-muted-foreground/80">
              <Mail className="h-3.5 w-3.5 text-muted-foreground/60" />
              <span>{user.email}</span>
            </div>

            {user.phone && (
              <div className="flex items-center gap-2 text-[11px] font-mono text-muted-foreground/80">
                <Phone className="h-3.5 w-3.5 text-muted-foreground/60" />
                <span>{user.phone}</span>
              </div>
            )}
          </div>

          {/* CAREER ADVISOR DETAILS SECTION */}
          {(user.role === 'CAREER_ADVISOR' || advisor) && (
            <div className="border border-border/40 bg-surface/50 rounded-xl p-4 space-y-3 text-left shadow-xs">
              <div className="flex items-center justify-between border-b border-border/10 pb-2.5">
                <div className="flex items-center gap-1.5 text-[10px] font-extrabold uppercase tracking-wider text-muted-foreground">
                  <GraduationCap className="h-3.5 w-3.5 text-primary" /> Career Advisor Profile
                </div>
                {advisor?.advisorCode && (
                  <span className="font-mono text-[10px] font-bold text-primary bg-primary/10 px-2 py-0.5 rounded">
                    {advisor.advisorCode}
                  </span>
                )}
              </div>

              {/* Status and Institute Bar */}
              <div className="grid grid-cols-2 gap-3 text-xs">
                <div>
                  <span className="text-[10px] block text-muted-foreground/60 font-medium">
                    Assigned Institute
                  </span>
                  <span className="font-semibold text-foreground">
                    {advisor?.institute?.name || '—'}{' '}
                    {advisor?.institute?.code ? `(${advisor.institute.code})` : ''}
                  </span>
                </div>

                <div>
                  <span className="text-[10px] block text-muted-foreground/60 font-medium">
                    Advisor Onboarding Status
                  </span>
                  <span className="inline-flex items-center gap-1 mt-0.5 px-2 py-0.5 text-[10px] font-bold rounded-full bg-amber-500/10 text-amber-500 border border-amber-500/20">
                    <Clock className="h-3 w-3" />
                    <span>{advisor?.status ? advisor.status.replace(/_/g, ' ') : 'PENDING'}</span>
                  </span>
                </div>

                <div>
                  <span className="text-[10px] block text-muted-foreground/60 font-medium">
                    Qualification
                  </span>
                  <span className="font-medium text-foreground">
                    {advisor?.qualification || '—'}
                  </span>
                </div>

                <div>
                  <span className="text-[10px] block text-muted-foreground/60 font-medium">
                    Experience
                  </span>
                  <span className="font-medium text-foreground">
                    {advisor?.experienceYears ?? 0} Year(s)
                  </span>
                </div>
              </div>

              {/* Bank Details */}
              {advisor?.bankAccountNumber && (
                <div className="border-t border-border/10 pt-2.5 space-y-1.5">
                  <div className="flex items-center gap-1 text-[10px] font-bold uppercase tracking-wider text-muted-foreground">
                    <CreditCard className="h-3 w-3 text-primary" /> Bank Payout Verification
                  </div>
                  <div className="grid grid-cols-2 gap-2 text-xs bg-muted/20 p-2.5 rounded-lg border border-border/30">
                    <div>
                      <span className="text-[10px] block text-muted-foreground/60">Holder</span>
                      <span className="font-semibold text-foreground">{advisor.bankAccountHolder}</span>
                    </div>
                    <div>
                      <span className="text-[10px] block text-muted-foreground/60">Account Number</span>
                      <span className="font-mono font-semibold text-foreground">{advisor.bankAccountNumber}</span>
                    </div>
                    <div>
                      <span className="text-[10px] block text-muted-foreground/60">IFSC Code</span>
                      <span className="font-mono font-semibold text-foreground">{advisor.bankIFSC}</span>
                    </div>
                    <div>
                      <span className="text-[10px] block text-muted-foreground/60">Bank Name</span>
                      <span className="font-semibold text-foreground">{advisor.bankName}</span>
                    </div>
                  </div>
                </div>
              )}

              {/* Advisor Documents */}
              <div className="border-t border-border/10 pt-2.5 space-y-2">
                <span className="text-[10px] font-bold uppercase tracking-wider text-muted-foreground">
                  Uploaded Verification Documents
                </span>

                {advisor?.documents && advisor.documents.length > 0 ? (
                  <div className="space-y-1.5">
                    {advisor.documents.map((doc: any) => (
                      <div
                        key={doc.id}
                        className="flex items-center justify-between p-2 bg-background border border-border/40 rounded-lg text-xs"
                      >
                        <div className="flex items-center gap-2">
                          <FileCheck className="h-3.5 w-3.5 text-primary" />
                          <span className="font-semibold text-foreground">{doc.type}</span>
                        </div>

                        <button
                          type="button"
                          onClick={() =>
                            setPreviewTarget({
                              name: `${user.firstName} ${user.lastName} - ${doc.type}`,
                              url: getAssetUrl(doc.fileUrl), // ✅ Transformed URL
                            })
                          }
                          className="inline-flex items-center gap-1 text-[10px] text-primary hover:underline font-bold cursor-pointer p-1 rounded hover:bg-primary/10"
                        >
                          <Eye className="h-3 w-3" />
                          <span>Inspect</span>
                        </button>
                      </div>
                    ))}
                  </div>
                ) : (
                  <p className="text-[11px] text-muted-foreground/70 italic">
                    No advisor documents uploaded yet.
                  </p>
                )}
              </div>
            </div>
          )}

          {/* User Profile Parameters */}
          {user.userProfile && (
            <div className="border border-border/40 bg-surface/50 rounded-xl p-3.5 space-y-3 text-left shadow-xs">
              <div className="flex items-center gap-1.5 text-[10px] font-extrabold uppercase tracking-wider text-muted-foreground">
                <Building className="h-3 w-3 text-primary" /> Profile Parameters
              </div>

              <div className="grid grid-cols-2 gap-x-4 gap-y-2 text-xs border-t border-border/10 pt-2.5">
                <div className="col-span-2">
                  <span className="text-[10px] block text-muted-foreground/60 font-medium">
                    Office Location
                  </span>
                  <span className="font-medium text-foreground leading-tight block">
                    {user.userProfile.registeredOfficeAddress || '—'}, {user.userProfile.city},{' '}
                    {user.userProfile.state} - {user.userProfile.postalCode}
                  </span>
                </div>

                <div>
                  <span className="text-[10px] block text-muted-foreground/60 font-medium">
                    Tax ID / GSTIN
                  </span>
                  <span className="font-mono text-[11px] text-foreground">
                    {user.userProfile.taxIdentifier || '—'}
                  </span>
                </div>

                <div>
                  <span className="text-[10px] block text-muted-foreground/60 font-medium">
                    CIN Identifier
                  </span>
                  <span className="font-mono text-[11px] text-foreground">
                    {user.userProfile.corporateRegNumber || '—'}
                  </span>
                </div>
              </div>
            </div>
          )}

          {/* Personal KYC Status Block */}
          {user.kycRecord && (
            <div className="border border-border/40 bg-background rounded-xl p-4 space-y-3 text-left">
              <div className="flex items-center justify-between border-b border-border/10 pb-2.5">
                <div className="flex items-center gap-1.5 text-[10px] font-extrabold uppercase tracking-wider text-muted-foreground">
                  <FileCheck className="h-3.5 w-3.5 text-primary" /> Personal Verification Matrix
                </div>

                {kycStatus === 'APPROVED' && (
                  <span className="inline-flex items-center gap-1 px-2.5 py-0.5 text-[10px] font-bold rounded-full bg-emerald-500/10 text-emerald-500 border border-emerald-500/20">
                    <CheckCircle2 className="h-3 w-3" /> Approved
                  </span>
                )}

                {kycStatus === 'UNDER_REVIEW' && (
                  <span className="inline-flex items-center gap-1 px-2.5 py-0.5 text-[10px] font-bold rounded-full bg-amber-500/10 text-amber-500 border border-amber-500/20">
                    <Clock className="h-3 w-3 animate-spin" /> Under Review
                  </span>
                )}

                {kycStatus === 'PENDING' && (
                  <span className="inline-flex items-center gap-1 px-2.5 py-0.5 text-[10px] font-bold rounded-full bg-destructive/10 text-destructive border border-destructive/20">
                    <XCircle className="h-3 w-3" /> Pending Submission
                  </span>
                )}
              </div>

              {user.kycRecord.assignedTo && (
                <div className="p-2.5 rounded-lg bg-muted/40 border border-border/40 text-xs flex items-center justify-between">
                  <span className="text-[10px] text-muted-foreground font-medium">Assigned Officer</span>
                  <span className="font-semibold text-foreground text-xs">
                    {user.kycRecord.assignedTo.firstName} {user.kycRecord.assignedTo.lastName} ({user.kycRecord.assignedTo.role})
                  </span>
                </div>
              )}

              {/* Document List */}
              <div className="space-y-2">
                <div className="flex items-center justify-between">
                  <span className="text-[10px] font-bold uppercase tracking-wider text-muted-foreground">
                    Verification Attachments
                  </span>
                  <Button
                    type="button"
                    variant="outline"
                    size="sm"
                    onClick={() => setIsUploadModalOpen(true)}
                    className="h-6 px-2 text-[10px] font-bold gap-1 cursor-pointer"
                  >
                    <Upload className="h-3 w-3" /> Attach New File
                  </Button>
                </div>

                {user.kycRecord.documents && user.kycRecord.documents.length > 0 ? (
                  <div className="space-y-1.5">
                    {user.kycRecord.documents.map((doc) => (
                      <div
                        key={doc.id}
                        className="flex items-center justify-between p-2.5 bg-muted/30 border border-border/40 rounded-lg text-xs"
                      >
                        <div className="flex items-center gap-2">
                          <FileCheck className="h-3.5 w-3.5 text-primary" />
                          <span className="font-medium text-foreground">{doc.documentType}</span>
                        </div>

                        <div className="flex items-center gap-2">
                          <button
                            type="button"
                            onClick={() =>
                              setEditTargetDoc({
                                id: doc.id,
                                type: doc.documentType,
                                name: doc.documentName,
                              })
                            }
                            className="inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground font-semibold cursor-pointer p-1 rounded hover:bg-muted"
                            title="Replace Document File"
                          >
                            <Edit3 className="h-3 w-3" />
                            <span>Replace</span>
                          </button>

                          <button
                            type="button"
                            onClick={() =>
                              setPreviewTarget({
                                name: doc.documentType,
                                url: getAssetUrl(doc.fileUrl), // ✅ Transformed URL
                              })
                            }
                            className="inline-flex items-center gap-1 text-[10px] text-primary hover:underline font-semibold cursor-pointer p-1 rounded hover:bg-primary/10"
                          >
                            <Eye className="h-3 w-3" />
                            <span>Inspect</span>
                          </button>
                        </div>
                      </div>
                    ))}
                  </div>
                ) : (
                  <div className="text-center py-6 border border-dashed border-border/60 rounded-lg text-[11px] text-muted-foreground/70">
                    No verified document assets available.
                  </div>
                )}
              </div>

              <div className="space-y-1.5 pt-2">
                <label className="text-[10px] font-bold uppercase tracking-wider text-muted-foreground">
                  Verification Remarks / Reason
                </label>
                <textarea
                  value={remarks}
                  onChange={(e) => setRemarks(e.target.value)}
                  placeholder="Notes for authorization or reasons for rejection..."
                  rows={2}
                  className="w-full text-xs font-medium p-2.5 border border-border/40 bg-background rounded-lg text-foreground focus:outline-none focus:border-primary"
                />
              </div>
            </div>
          )}

          {/* SECTOR KYC APPROVAL REQUESTS SECTION */}
          {user.role === 'DISTRICT_SECTOR_OWNER' && user.sectorKycRequests && (
            <div className="border border-border/40 bg-background rounded-xl p-4 space-y-3 text-left">
              <div className="flex items-center justify-between border-b border-border/10 pb-2.5">
                <div className="flex items-center gap-1.5 text-[10px] font-extrabold uppercase tracking-wider text-muted-foreground">
                  <Layers className="h-3.5 w-3.5 text-indigo-500" /> Sector Agreement Approvals
                </div>
                <span className="text-[10px] font-mono text-muted-foreground font-bold">
                  {user.sectorKycRequests.length} Sector(s) Mapped
                </span>
              </div>

              <div className="space-y-3">
                {user.sectorKycRequests.length > 0 ? (
                  user.sectorKycRequests.map((req: any) => (
                    <div key={req.id} className="p-3 bg-muted/20 border border-border/40 rounded-lg space-y-2 text-xs">
                      <div className="flex items-center justify-between">
                        <div>
                          <span className="font-bold text-foreground text-xs">{req.sector?.name}</span>
                          <span className="font-mono text-[10px] text-muted-foreground ml-2">({req.sector?.code})</span>
                        </div>

                        {req.status === 'APPROVED' && (
                          <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-emerald-500/10 text-emerald-500 border border-emerald-500/20">
                            <CheckCircle2 className="h-3 w-3" /> Approved
                          </span>
                        )}
                        {req.status === 'UNDER_APPROVAL' && (
                          <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-sky-500/10 text-sky-500 border border-sky-500/20">
                            <Clock className="h-3 w-3 animate-spin" /> Awaiting Review
                          </span>
                        )}
                        {req.status === 'AGREEMENT_PENDING' && (
                          <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-amber-500/10 text-amber-500 border border-amber-500/20">
                            <FileCheck className="h-3 w-3" /> Agreement Pending
                          </span>
                        )}
                        {req.status === 'REJECTED' && (
                          <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-rose-500/10 text-rose-500 border border-rose-500/20">
                            <XCircle className="h-3 w-3" /> Rejected
                          </span>
                        )}
                      </div>

                      {req.signedDocUrl ? (
                        <div className="flex items-center justify-between bg-background p-2 rounded border border-border/40 text-[11px]">
                          <span className="font-medium text-foreground">Signed Agreement Document</span>
                          <button
                            type="button"
                            onClick={() =>
                              setPreviewTarget({
                                name: `${req.sector?.name} Signed Agreement`,
                                url: getAssetUrl(req.signedDocUrl), // ✅ Transformed URL
                              })
                            }
                            className="inline-flex items-center gap-1 text-[10px] font-bold text-primary hover:underline cursor-pointer"
                          >
                            <Eye className="h-3 w-3" /> Inspect Document
                          </button>
                        </div>
                      ) : (
                        <p className="text-[10px] text-muted-foreground/70 italic">
                          No signed agreement document uploaded by DSO yet.
                        </p>
                      )}

                      {req.status === 'UNDER_APPROVAL' && (
                        <div className="space-y-2 pt-1 border-t border-border/10">
                          <input
                            type="text"
                            placeholder="Approval/Rejection remarks for this sector..."
                            value={sectorRemarks[req.id] || ''}
                            onChange={(e) =>
                              setSectorRemarks({ ...sectorRemarks, [req.id]: e.target.value })
                            }
                            className="w-full text-xs p-1.5 border border-border/40 rounded bg-background"
                          />
                          <div className="flex items-center justify-end gap-2">
                            <Button
                              type="button"
                              size="sm"
                              variant="outline"
                              disabled={reviewSectorKycMutation.isPending}
                              onClick={() => handleReviewSectorKyc(req.id, 'REJECTED')}
                              className="h-6 text-[10px] font-bold border-destructive/30 text-destructive hover:bg-destructive/10"
                            >
                              Reject Sector
                            </Button>
                            <Button
                              type="button"
                              size="sm"
                              disabled={reviewSectorKycMutation.isPending}
                              onClick={() => handleReviewSectorKyc(req.id, 'APPROVED')}
                              className="h-6 text-[10px] font-bold bg-emerald-600 hover:bg-emerald-700 text-white"
                            >
                              Approve Sector
                            </Button>
                          </div>
                        </div>
                      )}
                    </div>
                  ))
                ) : (
                  <p className="text-xs text-muted-foreground text-center py-2">No sector KYC requests found.</p>
                )}
              </div>
            </div>
          )}

          {/* INSTITUTE KYC APPROVAL REQUESTS SECTION */}
          {user.role === 'INSTITUTE_ADMIN' && user.instituteKycRequests && (
            <div className="border border-border/40 bg-background rounded-xl p-4 space-y-3 text-left">
              <div className="flex items-center justify-between border-b border-border/10 pb-2.5">
                <div className="flex items-center gap-1.5 text-[10px] font-extrabold uppercase tracking-wider text-muted-foreground">
                  <Home className="h-3.5 w-3.5 text-primary" /> Institute Agreement Approvals
                </div>
                <span className="text-[10px] font-mono text-muted-foreground font-bold">
                  {user.instituteKycRequests.length} Institute Request(s)
                </span>
              </div>

              <div className="space-y-3">
                {user.instituteKycRequests.length > 0 ? (
                  user.instituteKycRequests.map((req: any) => (
                    <div key={req.id} className="p-3 bg-muted/20 border border-border/40 rounded-lg space-y-2 text-xs">
                      <div className="flex items-center justify-between">
                        <div>
                          <span className="font-bold text-foreground text-xs">{req.institute?.name}</span>
                          <span className="font-mono text-[10px] text-muted-foreground ml-2">({req.institute?.code})</span>
                        </div>

                        {req.status === 'APPROVED' && (
                          <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-emerald-500/10 text-emerald-500 border border-emerald-500/20">
                            <CheckCircle2 className="h-3 w-3" /> Approved
                          </span>
                        )}
                        {req.status === 'UNDER_APPROVAL' && (
                          <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-sky-500/10 text-sky-500 border border-sky-500/20">
                            <Clock className="h-3 w-3 animate-spin" /> Awaiting Review
                          </span>
                        )}
                        {req.status === 'AGREEMENT_PENDING' && (
                          <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-amber-500/10 text-amber-500 border border-amber-500/20">
                            <FileCheck className="h-3 w-3" /> Agreement Pending Upload
                          </span>
                        )}
                        {req.status === 'REJECTED' && (
                          <span className="inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-bold rounded-full bg-rose-500/10 text-rose-500 border border-rose-500/20">
                            <XCircle className="h-3 w-3" /> Rejected
                          </span>
                        )}
                      </div>

                      {req.signedDocUrl ? (
                        <div className="flex items-center justify-between bg-background p-2 rounded border border-border/40 text-[11px]">
                          <span className="font-medium text-foreground">Signed Agreement Document</span>
                          <button
                            type="button"
                            onClick={() =>
                              setPreviewTarget({
                                name: `${req.institute?.name} Signed Agreement`,
                                url: getAssetUrl(req.signedDocUrl), // ✅ Transformed URL
                              })
                            }
                            className="inline-flex items-center gap-1 text-[10px] font-bold text-primary hover:underline cursor-pointer"
                          >
                            <Eye className="h-3 w-3" /> Inspect Document
                          </button>
                        </div>
                      ) : (
                        <p className="text-[10px] text-muted-foreground/70 italic">
                          No signed agreement document uploaded by Institute Admin yet.
                        </p>
                      )}

                      {req.status === 'UNDER_APPROVAL' && (
                        <div className="space-y-2 pt-1 border-t border-border/10">
                          <input
                            type="text"
                            placeholder="Approval/Rejection remarks for this institute..."
                            value={instituteRemarks[req.id] || ''}
                            onChange={(e) =>
                              setInstituteRemarks({ ...instituteRemarks, [req.id]: e.target.value })
                            }
                            className="w-full text-xs p-1.5 border border-border/40 rounded bg-background"
                          />
                          <div className="flex items-center justify-end gap-2">
                            <Button
                              type="button"
                              size="sm"
                              variant="outline"
                              disabled={reviewInstituteKycMutation.isPending}
                              onClick={() => handleReviewInstituteKyc(req.id, 'REJECTED')}
                              className="h-6 text-[10px] font-bold border-destructive/30 text-destructive hover:bg-destructive/10"
                            >
                              Reject Institute
                            </Button>
                            <Button
                              type="button"
                              size="sm"
                              disabled={reviewInstituteKycMutation.isPending}
                              onClick={() => handleReviewInstituteKyc(req.id, 'APPROVED')}
                              className="h-6 text-[10px] font-bold bg-emerald-600 hover:bg-emerald-700 text-white"
                            >
                              Approve Institute
                            </Button>
                          </div>
                        </div>
                      )}
                    </div>
                  ))
                ) : (
                  <p className="text-xs text-muted-foreground text-center py-2">No institute KYC requests found.</p>
                )}
              </div>
            </div>
          )}
        </div>

        {/* Drawer Footer Actions */}
        <div className="border-t border-border/10 pt-4 flex items-center justify-between gap-2">
          <Button variant="ghost" onClick={handleSafeClose} className="h-8 text-xs font-semibold cursor-pointer">
            Dismiss
          </Button>

          <div className="flex items-center gap-2">
            <Button
              variant="outline"
              onClick={() => setIsUploadModalOpen(true)}
              className="h-8 text-[11px] font-bold rounded-lg border-primary/30 text-primary hover:bg-primary/10 cursor-pointer"
            >
              Upload Documents
            </Button>
            {user.kycRecord && kycStatus !== 'REJECTED' && (
              <Button
                variant="outline"
                disabled={reviewKycMutation.isPending}
                onClick={() => handleReviewAction('REJECTED')}
                className="h-8 text-[11px] font-bold rounded-lg border-destructive/20 text-destructive hover:bg-destructive/10 cursor-pointer"
              >
                Reject KYC
              </Button>
            )}
            {user.kycRecord && kycStatus !== 'APPROVED' && (
              <Button
                disabled={reviewKycMutation.isPending}
                onClick={() => handleReviewAction('APPROVED')}
                className="h-8 text-[11px] font-bold rounded-lg bg-emerald-600 hover:bg-emerald-700 text-white cursor-pointer"
              >
                Approve KYC
              </Button>
            )}
          </div>
        </div>
      </div>

      {/* Batch Upload Modal */}
      {isUploadModalOpen && (
        <UploadKycModal
          userId={user.id}
          userFullName={`${user.firstName} ${user.lastName}`}
          onClose={() => setIsUploadModalOpen(false)}
          onSuccess={() => {
            if (onRefresh) onRefresh();
          }}
        />
      )}

      {/* Replace Single Document Modal */}
      {editTargetDoc && (
        <EditKycDocumentModal
          documentId={editTargetDoc.id}
          documentType={editTargetDoc.type}
          currentDocumentName={editTargetDoc.name}
          userFullName={`${user.firstName} ${user.lastName}`}
          onClose={() => setEditTargetDoc(null)}
          onSuccess={() => {
            if (onRefresh) onRefresh();
          }}
        />
      )}

      {/* Document Preview Modal */}
      {previewTarget && (
        <DocumentPreviewModal
          documentName={previewTarget.name}
          fileUrl={previewTarget.url}
          onClose={() => setPreviewTarget(null)}
        />
      )}
    </>
  );
}