import { prisma } from '@peyzajart/db'
import Link from 'next/link'
import { formatTL } from '../../../lib/format'

export const dynamic = 'force-dynamic'

const SL: Record<string, string> = {
  PENDING: 'Beklemede', CONFIRMED: 'Onaylandı', PREPARING: 'Hazırlanıyor',
  SHIPPED: 'Kargoda', DELIVERED: 'Teslim', CANCELLED: 'İptal',
}
const SC: Record<string, string> = {
  PENDING: 'bg-yellow-100 text-yellow-800', CONFIRMED: 'bg-blue-100 text-blue-800',
  PREPARING: 'bg-purple-100 text-purple-800', SHIPPED: 'bg-orange-100 text-orange-800',
  DELIVERED: 'bg-green-100 text-green-800', CANCELLED: 'bg-red-100 text-red-800',
}

interface SearchParams { status?: string; dealerCode?: string; from?: string; to?: string }

export default async function AdminOrdersPage({ searchParams }: { searchParams: SearchParams }) {
  const where: Record<string, unknown> = {}
  if (searchParams.status) where.status = searchParams.status
  if (searchParams.dealerCode) where.dealer = { dealerCode: searchParams.dealerCode.toUpperCase() }
  if (searchParams.from || searchParams.to) {
    where.createdAt = {
      ...(searchParams.from ? { gte: new Date(searchParams.from) } : {}),
      ...(searchParams.to ? { lte: new Date(searchParams.to + 'T23:59:59') } : {}),
    }
  }

  const [orders, dealers] = await Promise.all([
    prisma.order.findMany({
      where,
      orderBy: { createdAt: 'desc' },
      include: { dealer: { select: { companyName: true, dealerCode: true } } },
    }),
    prisma.dealer.findMany({ where: { isAdmin: false, isActive: true }, select: { dealerCode: true, companyName: true }, orderBy: { dealerCode: 'asc' } }),
  ])

  return (
    <div className="p-6 md:p-8">
      <div className="mb-6">
        <h1 className="font-display text-4xl font-light text-brown">Tüm Siparişler</h1>
        <p className="font-body text-sm text-brown/50 mt-1">{orders.length} sipariş</p>
      </div>

      {/* Filtreler */}
      <form method="GET" className="bg-white rounded-xl p-4 shadow-sm mb-6 flex flex-wrap gap-3 items-end">
        <div>
          <label className="block font-body text-xs text-brown/50 uppercase tracking-widest mb-1">Durum</label>
          <select name="status" defaultValue={searchParams.status ?? ''}
            className="px-3 py-2 rounded-lg border border-sand bg-cream font-body text-sm focus:outline-none focus:border-earth">
            <option value="">Tümü</option>
            {Object.entries(SL).map(([v, l]) => <option key={v} value={v}>{l}</option>)}
          </select>
        </div>
        <div>
          <label className="block font-body text-xs text-brown/50 uppercase tracking-widest mb-1">Bayi</label>
          <select name="dealerCode" defaultValue={searchParams.dealerCode ?? ''}
            className="px-3 py-2 rounded-lg border border-sand bg-cream font-body text-sm focus:outline-none focus:border-earth">
            <option value="">Tümü</option>
            {dealers.map(d => <option key={d.dealerCode} value={d.dealerCode}>{d.dealerCode} — {d.companyName}</option>)}
          </select>
        </div>
        <div>
          <label className="block font-body text-xs text-brown/50 uppercase tracking-widest mb-1">Başlangıç</label>
          <input type="date" name="from" defaultValue={searchParams.from ?? ''}
            className="px-3 py-2 rounded-lg border border-sand bg-cream font-body text-sm focus:outline-none focus:border-earth" />
        </div>
        <div>
          <label className="block font-body text-xs text-brown/50 uppercase tracking-widest mb-1">Bitiş</label>
          <input type="date" name="to" defaultValue={searchParams.to ?? ''}
            className="px-3 py-2 rounded-lg border border-sand bg-cream font-body text-sm focus:outline-none focus:border-earth" />
        </div>
        <button type="submit"
          className="px-5 py-2 rounded-lg bg-brown text-cream font-body text-sm tracking-widest uppercase hover:bg-earth transition-colors">
          Filtrele
        </button>
        <Link href="/admin/orders" className="px-4 py-2 rounded-lg border border-sand text-brown font-body text-sm hover:border-earth transition-colors">
          Sıfırla
        </Link>
      </form>

      <div className="bg-white shadow-sm rounded-xl overflow-hidden">
        <div className="overflow-x-auto">
          <table className="w-full">
            <thead>
              <tr className="bg-sand/50 text-left">
                {['Sipariş No', 'Bayi', 'Tarih', 'Tutar', 'Ödeme', 'Ödeme Durumu', 'Durum'].map(h => (
                  <th key={h} className="px-5 py-3 font-body text-xs text-brown/50 tracking-widest uppercase whitespace-nowrap">{h}</th>
                ))}
              </tr>
            </thead>
            <tbody className="divide-y divide-sand">
              {orders.map((o) => (
                <tr key={o.id} className="hover:bg-sand/20 transition-colors">
                  <td className="px-5 py-3">
                    <Link href={`/admin/orders/${o.orderNo}`}
                      className="font-body text-sm font-medium text-earth hover:text-brown">{o.orderNo}</Link>
                  </td>
                  <td className="px-5 py-3">
                    <p className="font-body text-sm text-brown">{o.dealer.companyName}</p>
                    <p className="font-mono text-xs text-brown/40">{o.dealer.dealerCode}</p>
                  </td>
                  <td className="px-5 py-3 font-body text-xs text-brown/50 whitespace-nowrap">
                    {new Date(o.createdAt).toLocaleDateString('tr-TR')}
                  </td>
                  <td className="px-5 py-3 font-body text-sm font-medium text-brown">{formatTL(o.totalUSD)}</td>
                  <td className="px-5 py-3 font-body text-xs text-brown/60">
                    {o.paymentMethod === 'ONLINE' ? 'İyzico' : 'Havale'}
                  </td>
                  <td className="px-5 py-3">
                    <span className={`font-body text-xs px-2 py-0.5 rounded-full ${
                      o.paymentStatus === 'PAID' ? 'bg-green-100 text-green-700' :
                      o.paymentStatus === 'FAILED' ? 'bg-red-100 text-red-700' :
                      'bg-yellow-100 text-yellow-700'
                    }`}>
                      {o.paymentStatus === 'PAID' ? 'Ödendi' : o.paymentStatus === 'FAILED' ? 'Başarısız' : 'Bekliyor'}
                    </span>
                  </td>
                  <td className="px-5 py-3">
                    <span className={`px-2 py-0.5 rounded-full font-body text-xs ${SC[o.status] ?? ''}`}>
                      {SL[o.status] ?? o.status}
                    </span>
                  </td>
                </tr>
              ))}
            </tbody>
          </table>
          {orders.length === 0 && (
            <p className="font-body text-sm text-brown/40 p-8 text-center">Sipariş bulunamadı.</p>
          )}
        </div>
      </div>
    </div>
  )
}
