import { useState } from 'react';
import { useRouter } from 'next/router';
import Link from 'next/link';
import { Search, Package, Truck, CheckCircle, Clock, AlertCircle } from 'lucide-react';
import Header from '../components/Header';
import Footer from '../components/Footer';
import { orderService, Order } from '../services/orders';

export default function OrderTrackingPage() {
  const router = useRouter();
  const { id: initialOrderId } = router.query;
  
  const [orderNumber, setOrderNumber] = useState<string>(initialOrderId as string || '');
  const [order, setOrder] = useState<Order | null>(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState<string | null>(null);
  const [searched, setSearched] = useState(false);

  // Обработчик поиска заказа
  const handleSearch = async (e: React.FormEvent) => {
    e.preventDefault();
    
    if (!orderNumber || orderNumber.trim() === '') {
      setError('Пожалуйста, введите номер заказа');
      return;
    }
    
    try {
      setLoading(true);
      setError(null);
      
      const orderData = await orderService.getOrderById(Number(orderNumber));
      setOrder(orderData);
      setSearched(true);
    } catch (err) {
      console.error('Ошибка при поиске заказа:', err);
      setError('Заказ не найден или у вас нет доступа к нему');
      setOrder(null);
    } finally {
      setLoading(false);
    }
  };

  // Получение информации о статусе заказа
  const getOrderStatusInfo = (status: string) => {
    switch (status) {
      case 'pending':
        return { 
          label: 'Ожидает оплаты', 
          color: 'text-yellow-600', 
          bgColor: 'bg-yellow-50',
          icon: <Clock className="h-5 w-5" />,
          description: 'Ваш заказ создан и ожидает оплаты. После подтверждения оплаты мы начнем его обработку.'
        };
      case 'processing':
        return { 
          label: 'В обработке', 
          color: 'text-blue-600', 
          bgColor: 'bg-blue-50',
          icon: <Clock className="h-5 w-5" />,
          description: 'Мы обрабатываем ваш заказ. Наши сотрудники собирают товары и готовят их к отправке.'
        };
      case 'shipped':
        return { 
          label: 'Отправлен', 
          color: 'text-indigo-600', 
          bgColor: 'bg-indigo-50',
          icon: <Truck className="h-5 w-5" />,
          description: 'Ваш заказ отправлен и находится в пути. Скоро он будет доставлен по указанному адресу.'
        };
      case 'delivered':
        return { 
          label: 'Доставлен', 
          color: 'text-green-600', 
          bgColor: 'bg-green-50',
          icon: <CheckCircle className="h-5 w-5" />,
          description: 'Ваш заказ успешно доставлен. Спасибо за покупку!'
        };
      case 'cancelled':
        return { 
          label: 'Отменен', 
          color: 'text-red-600', 
          bgColor: 'bg-red-50',
          icon: <AlertCircle className="h-5 w-5" />,
          description: 'Заказ был отменен. Если у вас есть вопросы, пожалуйста, свяжитесь с нашей службой поддержки.'
        };
      default:
        return { 
          label: 'Неизвестно', 
          color: 'text-gray-600', 
          bgColor: 'bg-gray-50',
          icon: <Clock className="h-5 w-5" />,
          description: 'Статус заказа неизвестен. Пожалуйста, свяжитесь с нашей службой поддержки для получения дополнительной информации.'
        };
    }
  };

  // Форматирование даты
  const formatDate = (dateString: string) => {
    const date = new Date(dateString);
    return new Intl.DateTimeFormat('ru-RU', {
      day: '2-digit',
      month: '2-digit',
      year: 'numeric',
      hour: '2-digit',
      minute: '2-digit'
    }).format(date);
  };

  // Отображение прогресса заказа
  const renderOrderProgress = (status: string) => {
    const steps = [
      { key: 'pending', label: 'Заказ создан', icon: <Package /> },
      { key: 'processing', label: 'В обработке', icon: <Clock /> },
      { key: 'shipped', label: 'Отправлен', icon: <Truck /> },
      { key: 'delivered', label: 'Доставлен', icon: <CheckCircle /> }
    ];
    
    let currentStepIndex = steps.findIndex(step => step.key === status);
    
    // Если статус "cancelled" или неизвестный, показываем только первый шаг
    if (status === 'cancelled' || currentStepIndex === -1) {
      currentStepIndex = 0;
    }
    
    return (
      <div className="mt-8">
        <div className="relative">
          {/* Линия прогресса */}
          <div className="absolute top-5 left-0 right-0 h-0.5 bg-gray-200">
            <div 
              className="h-0.5 bg-green-500 transition-all duration-500" 
              style={{ width: status === 'cancelled' ? '0%' : `${(currentStepIndex / (steps.length - 1)) * 100}%` }}
            ></div>
          </div>
          
          {/* Шаги */}
          <div className="relative flex justify-between">
            {steps.map((step, index) => {
              const isActive = index <= currentStepIndex && status !== 'cancelled';
              const isCurrent = index === currentStepIndex && status !== 'cancelled';
              
              return (
                <div key={step.key} className="flex flex-col items-center">
                  <div 
                    className={`w-10 h-10 rounded-full flex items-center justify-center z-10 ${
                      isActive 
                        ? 'bg-green-500 text-white' 
                        : status === 'cancelled' && index === 0 
                          ? 'bg-red-500 text-white' 
                          : 'bg-gray-200 text-gray-500'
                    } ${isCurrent ? 'ring-4 ring-green-100' : ''}`}
                  >
                    {status === 'cancelled' && index === 0 ? <AlertCircle className="w-5 h-5" /> : step.icon}
                  </div>
                  <div className="text-xs font-medium mt-2 text-center">{step.label}</div>
                </div>
              );
            })}
          </div>
        </div>
      </div>
    );
  };

  return (
    <div className="min-h-screen flex flex-col">
      <Header />
      
      <main className="flex-grow pt-24 pb-16">
        <div className="container mx-auto px-4">
          <h1 className="text-2xl md:text-3xl font-bold mb-8 text-center">Отслеживание заказа</h1>
          
          <div className="max-w-3xl mx-auto">
            <div className="bg-white rounded-lg shadow-md overflow-hidden mb-8">
              <div className="p-6">
                <form onSubmit={handleSearch} className="flex flex-col md:flex-row gap-4">
                  <div className="flex-grow">
                    <label htmlFor="orderNumber" className="block text-sm font-medium text-gray-700 mb-1">
                      Номер заказа
                    </label>
                    <input
                      type="text"
                      id="orderNumber"
                      value={orderNumber}
                      onChange={(e) => setOrderNumber(e.target.value)}
                      placeholder="Введите номер заказа"
                      className="w-full border border-gray-300 rounded-md px-4 py-2 focus:outline-none focus:ring-2 focus:ring-black"
                    />
                  </div>
                  <div className="flex items-end">
                    <button
                      type="submit"
                      disabled={loading}
                      className="w-full md:w-auto bg-black text-white px-6 py-2 rounded-md hover:bg-gray-800 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center"
                    >
                      {loading ? (
                        <div className="animate-spin rounded-full h-5 w-5 border-t-2 border-b-2 border-white"></div>
                      ) : (
                        <>
                          <Search className="w-4 h-4 mr-2" />
                          Найти
                        </>
                      )}
                    </button>
                  </div>
                </form>
                
                {error && (
                  <div className="mt-4 bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded">
                    {error}
                  </div>
                )}
              </div>
            </div>
            
            {searched && order && (
              <div className="bg-white rounded-lg shadow-md overflow-hidden">
                <div className="p-6 border-b border-gray-200">
                  <div className="flex justify-between items-start">
                    <div>
                      <h2 className="text-xl font-semibold">Заказ №{order.id}</h2>
                      <p className="text-gray-500 mt-1">Создан: {formatDate(order.created_at)}</p>
                    </div>
                    
                    {order.status && (
                      <div className={`px-3 py-1 rounded-full ${getOrderStatusInfo(order.status).bgColor} ${getOrderStatusInfo(order.status).color} flex items-center`}>
                        {getOrderStatusInfo(order.status).icon}
                        <span className="ml-1 text-sm font-medium">{getOrderStatusInfo(order.status).label}</span>
                      </div>
                    )}
                  </div>
                  
                  {order.status && renderOrderProgress(order.status)}
                  
                  <div className="mt-6 p-4 bg-gray-50 rounded-md">
                    <p className="text-gray-700">{getOrderStatusInfo(order.status).description}</p>
                  </div>
                </div>
                
                <div className="p-6">
                  <div className="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6">
                    <div>
                      <h3 className="text-lg font-medium mb-2">Информация о заказе</h3>
                      <div className="bg-gray-50 p-4 rounded-md">
                        <p className="text-sm text-gray-600 mb-1">Сумма заказа:</p>
                        <p className="font-medium">{order.total_amount.toLocaleString('ru-RU')} ₽</p>
                        
                        <p className="text-sm text-gray-600 mt-3 mb-1">Способ оплаты:</p>
                        <p className="font-medium">{order.payment_method}</p>
                        
                        <p className="text-sm text-gray-600 mt-3 mb-1">Количество товаров:</p>
                        <p className="font-medium">{order.items.length}</p>
                      </div>
                    </div>
                    
                    <div>
                      <h3 className="text-lg font-medium mb-2">Адрес доставки</h3>
                      <div className="bg-gray-50 p-4 rounded-md">
                        <p className="whitespace-pre-line">{order.shipping_address}</p>
                      </div>
                    </div>
                  </div>
                  
                  <div className="mt-6">
                    <Link 
                      href={`/account/orders/${order.id}`}
                      className="text-indigo-600 hover:text-indigo-500 flex items-center"
                    >
                      <Package className="w-4 h-4 mr-2" />
                      Перейти к подробной информации о заказе
                    </Link>
                  </div>
                </div>
              </div>
            )}
            
            {!searched && (
              <div className="text-center py-8">
                <Package className="h-16 w-16 mx-auto text-gray-400 mb-4" />
                <p className="text-gray-600">Введите номер заказа, чтобы отследить его статус</p>
              </div>
            )}
          </div>
        </div>
      </main>
      
      <Footer />
    </div>
  );
} 