'use client'

import { ShoppingCart, AlertTriangle, CheckCircle, Info } from 'lucide-react'
import { useState } from 'react'

import { Button } from '@/components/ui/button'
import { Separator } from '@/components/ui/separator'

interface CartItem {
  id: string
  quantity: number
  totalPrice: number
  isAvailable: boolean
  availableQuantity: number
  product: {
    id: string
    name: string
    article: string
    price: number
    quantity: number
    organization: {
      id: string
      name?: string
      fullName?: string
      inn: string
    }
  }
}

interface Cart {
  id: string
  items: CartItem[]
  totalPrice: number
  totalItems: number
}

interface CartSummaryProps {
  cart: Cart
}

export function CartSummary({ cart }: CartSummaryProps) {
  const [isProcessingOrder, setIsProcessingOrder] = useState(false)

  const formatPrice = (price: number) => {
    return new Intl.NumberFormat('ru-RU', {
      style: 'currency',
      currency: 'RUB',
    }).format(price)
  }

  // Анализ товаров в корзине
  const availableItems = cart.items.filter((item) => item.isAvailable)
  const unavailableItems = cart.items.filter((item) => !item.isAvailable)

  const availableTotal = availableItems.reduce((sum, item) => sum + item.totalPrice, 0)
  const availableItemsCount = availableItems.reduce((sum, item) => sum + item.quantity, 0)

  // Группировка по продавцам
  const sellerGroups = availableItems.reduce(
    (groups, item) => {
      const sellerId = item.product.organization.id
      if (!groups[sellerId]) {
        groups[sellerId] = {
          organization: item.product.organization,
          items: [],
          total: 0,
        }
      }
      groups[sellerId].items.push(item)
      groups[sellerId].total += item.totalPrice
      return groups
    },
    {} as Record<
      string,
      {
        organization: CartItem['product']['organization']
        items: CartItem[]
        total: number
      }
    >,
  )

  const sellerCount = Object.keys(sellerGroups).length
  const canOrder = availableItems.length > 0

  const handleOrder = () => {
    if (!canOrder) return

    setIsProcessingOrder(true)
    // Здесь будет логика отправки заявок
    setTimeout(() => {
      alert('Функция отправки заявок будет реализована в следующих версиях')
      setIsProcessingOrder(false)
    }, 1000)
  }

  const getOrganizationName = (org: CartItem['product']['organization']) => {
    return org.name || org.fullName || 'Неизвестная организация'
  }

  return (
    <div className="p-6">
      <h2 className="text-lg font-semibold text-white mb-4">Сводка заявок</h2>

      <div className="space-y-4">
        {/* Общая информация */}
        <div className="space-y-2">
          <div className="flex justify-between text-sm">
            <span className="text-white/70">Всего заявок:</span>
            <span className="text-white">{cart.totalItems}</span>
          </div>
          <div className="flex justify-between text-sm">
            <span className="text-white/70">Готово к отправке:</span>
            <span className="text-white">{availableItemsCount}</span>
          </div>
          {unavailableItems.length > 0 && (
            <div className="flex justify-between text-sm">
              <span className="text-red-400">Недоступно:</span>
              <span className="text-red-400">{unavailableItems.length}</span>
            </div>
          )}
        </div>

        <Separator className="bg-white/10" />

        {/* Информация о поставщиках */}
        {sellerCount > 0 && (
          <div className="space-y-3">
            <div className="flex items-center space-x-2 text-sm text-white/70">
              <Info className="h-4 w-4" />
              <span>Поставщики ({sellerCount}):</span>
            </div>

            <div className="space-y-2">
              {Object.values(sellerGroups).map((group) => (
                <div key={group.organization.id} className="bg-white/5 p-3 rounded-lg text-xs">
                  <div className="flex justify-between items-start mb-1">
                    <span className="text-white font-medium line-clamp-1">
                      {getOrganizationName(group.organization)}
                    </span>
                    <span className="text-purple-300 font-medium">{formatPrice(group.total)}</span>
                  </div>
                  <div className="text-white/50">ИНН: {group.organization.inn}</div>
                  <div className="text-white/50">Заявок: {group.items.length}</div>
                </div>
              ))}
            </div>
          </div>
        )}

        <Separator className="bg-white/10" />

        {/* Итоговая стоимость */}
        <div className="space-y-2">
          <div className="flex justify-between">
            <span className="text-white/70">Стоимость заявок:</span>
            <span className="text-white">{formatPrice(availableTotal)}</span>
          </div>
          <div className="flex justify-between text-lg font-semibold">
            <span className="text-white">Общая сумма:</span>
            <span className="text-purple-300">{formatPrice(availableTotal)}</span>
          </div>
        </div>

        <Separator className="bg-white/10" />

        {/* Статус заявок */}
        <div className="space-y-3">
          {canOrder ? (
            <div className="flex items-center space-x-2 text-green-400 text-sm">
              <CheckCircle className="h-4 w-4" />
              <span>Готово к отправке</span>
            </div>
          ) : (
            <div className="flex items-center space-x-2 text-orange-400 text-sm">
              <AlertTriangle className="h-4 w-4" />
              <span>Нет доступных заявок</span>
            </div>
          )}

          {unavailableItems.length > 0 && (
            <div className="bg-orange-500/10 border border-orange-500/20 rounded-lg p-3 text-xs">
              <div className="text-orange-400 font-medium mb-1">Внимание!</div>
              <div className="text-orange-300">
                {unavailableItems.length} заявок недоступно. Они будут исключены при отправке.
              </div>
            </div>
          )}

          {sellerCount > 1 && (
            <div className="bg-blue-500/10 border border-blue-500/20 rounded-lg p-3 text-xs">
              <div className="text-blue-400 font-medium mb-1">Несколько продавцов</div>
              <div className="text-blue-300">
                Ваши заявки будут отправлены {sellerCount} разным продавцам для рассмотрения.
              </div>
            </div>
          )}
        </div>

        {/* Кнопка отправки заявок */}
        <Button
          onClick={handleOrder}
          disabled={!canOrder || isProcessingOrder}
          className={`w-full h-12 text-sm font-medium ${
            canOrder
              ? 'bg-gradient-to-r from-purple-500 to-pink-500 hover:from-purple-600 hover:to-pink-600 text-white'
              : 'bg-gray-500/20 text-gray-400 cursor-not-allowed'
          }`}
        >
          <ShoppingCart className="h-4 w-4 mr-2" />
          {isProcessingOrder
            ? 'Отправляем заявки...'
            : canOrder
              ? `Отправить заявки • ${formatPrice(availableTotal)}`
              : 'Невозможно отправить заявки'}
        </Button>

        {/* Дополнительная информация */}
        <div className="text-xs text-white/50 space-y-1">
          <p>• Заявки будут отправлены продавцам для рассмотрения</p>
          <p>• Окончательные условия согласовываются с каждым продавцом</p>
          <p>• Вы можете изменить количество товаров до отправки заявок</p>
        </div>
      </div>
    </div>
  )
}
