import React, { useState } from 'react';
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './ui/card';
import { Badge } from './ui/badge';
import { Button } from './ui/button';
import { Input } from './ui/input';
import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs';
import { 
  Search, 
  Clock, 
  Users, 
  BookOpen, 
  Award, 
  Calendar,
  Filter,
  GraduationCap,
  TrendingUp,
  Code,
  Palette,
  BarChart,
  Globe
} from 'lucide-react';

interface Training {
  id: number;
  title: string;
  description: string;
  category: string;
  level: 'Débutant' | 'Intermédiaire' | 'Avancé';
  duration: string;
  participants: number;
  instructor: string;
  price: string;
  dates: string[];
  icon: React.ReactNode;
  features: string[];
}

const trainings: Training[] = [
  {
    id: 1,
    title: "Développement Web Full-Stack",
    description: "Maîtrisez le développement web moderne avec React, Node.js et les dernières technologies",
    category: "Développement",
    level: "Intermédiaire",
    duration: "12 semaines",
    participants: 45,
    instructor: "Marie Dupont",
    price: "2 490€",
    dates: ["15 Mars 2024", "10 Mai 2024"],
    icon: <Code className="w-6 h-6" />,
    features: ["React & TypeScript", "Node.js & Express", "Bases de données", "Déploiement Cloud"]
  },
  {
    id: 2,
    title: "Design UX/UI Avancé",
    description: "Créez des interfaces utilisateur exceptionnelles et des expériences mémorables",
    category: "Design",
    level: "Avancé",
    duration: "8 semaines",
    participants: 32,
    instructor: "Thomas Martin",
    price: "1 890€",
    dates: ["20 Mars 2024", "15 Juin 2024"],
    icon: <Palette className="w-6 h-6" />,
    features: ["Design Systems", "Prototypage Figma", "Tests utilisateurs", "Accessibilité"]
  },
  {
    id: 3,
    title: "Data Science & Machine Learning",
    description: "Explorez l'analyse de données et les algorithmes d'apprentissage automatique",
    category: "Data",
    level: "Avancé",
    duration: "16 semaines",
    participants: 28,
    instructor: "Sophie Bernard",
    price: "3 290€",
    dates: ["1 Avril 2024", "1 Septembre 2024"],
    icon: <BarChart className="w-6 h-6" />,
    features: ["Python & Pandas", "Machine Learning", "Deep Learning", "Projets réels"]
  },
  {
    id: 4,
    title: "Marketing Digital",
    description: "Maîtrisez les stratégies marketing digital et l'acquisition de clients",
    category: "Marketing",
    level: "Débutant",
    duration: "6 semaines",
    participants: 58,
    instructor: "Lucas Petit",
    price: "1 290€",
    dates: ["25 Mars 2024", "5 Mai 2024"],
    icon: <TrendingUp className="w-6 h-6" />,
    features: ["SEO & SEA", "Social Media", "Email Marketing", "Analytics"]
  },
  {
    id: 5,
    title: "Développement Mobile iOS & Android",
    description: "Créez des applications mobiles natives et cross-platform performantes",
    category: "Développement",
    level: "Intermédiaire",
    duration: "10 semaines",
    participants: 38,
    instructor: "Emma Rousseau",
    price: "2 190€",
    dates: ["10 Avril 2024", "15 Juin 2024"],
    icon: <Globe className="w-6 h-6" />,
    features: ["React Native", "Swift & Kotlin", "API Integration", "App Store Deploy"]
  },
  {
    id: 6,
    title: "Gestion de Projet Agile",
    description: "Pilotez vos projets avec les méthodologies Scrum et Kanban",
    category: "Management",
    level: "Débutant",
    duration: "4 semaines",
    participants: 65,
    instructor: "Pierre Dubois",
    price: "890€",
    dates: ["5 Avril 2024", "20 Mai 2024"],
    icon: <Users className="w-6 h-6" />,
    features: ["Scrum Master", "Kanban", "Jira & Trello", "Leadership"]
  }
];

const TrainingCatalog: React.FC = () => {
  const [searchQuery, setSearchQuery] = useState('');
  const [selectedCategory, setSelectedCategory] = useState('Toutes');

  const categories = ['Toutes', 'Développement', 'Design', 'Data', 'Marketing', 'Management'];

  const filteredTrainings = trainings.filter(training => {
    const matchesSearch = training.title.toLowerCase().includes(searchQuery.toLowerCase()) ||
                         training.description.toLowerCase().includes(searchQuery.toLowerCase());
    const matchesCategory = selectedCategory === 'Toutes' || training.category === selectedCategory;
    return matchesSearch && matchesCategory;
  });

  const getLevelColor = (level: string) => {
    switch (level) {
      case 'Débutant': return 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200';
      case 'Intermédiaire': return 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200';
      case 'Avancé': return 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200';
      default: return 'bg-gray-100 text-gray-800';
    }
  };

  return (
    <div className="min-h-screen bg-gradient-to-br from-background via-background to-muted">
      {/* Header */}
      <header className="border-b bg-card/50 backdrop-blur-sm sticky top-0 z-50">
        <div className="container mx-auto px-4 py-6">
          <div className="flex items-center justify-between mb-6">
            <div className="flex items-center gap-3">
              <div className="bg-primary text-primary-foreground p-3 rounded-lg">
                <GraduationCap className="w-8 h-8" />
              </div>
              <div>
                <h1 className="text-3xl font-heading font-bold text-foreground">Catalogue de Formations</h1>
                <p className="text-muted-foreground">Développez vos compétences avec nos experts</p>
              </div>
            </div>
            <div className="hidden md:flex items-center gap-4">
              <Badge variant="secondary" className="text-sm">
                <Award className="w-4 h-4 mr-1" />
                Certifié
              </Badge>
            </div>
          </div>

          {/* Search Bar */}
          <div className="relative">
            <Search className="absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-5 h-5" />
            <Input
              type="text"
              placeholder="Rechercher une formation..."
              value={searchQuery}
              onChange={(e) => setSearchQuery(e.target.value)}
              className="pl-10 py-6 text-lg"
            />
          </div>
        </div>
      </header>

      {/* Main Content */}
      <main className="container mx-auto px-4 py-8">
        {/* Category Tabs */}
        <Tabs defaultValue="Toutes" className="mb-8" onValueChange={setSelectedCategory}>
          <TabsList className="w-full justify-start overflow-x-auto flex-wrap h-auto gap-2 bg-muted/50 p-2">
            {categories.map(category => (
              <TabsTrigger 
                key={category} 
                value={category}
                className="data-[state=active]:bg-primary data-[state=active]:text-primary-foreground"
              >
                <Filter className="w-4 h-4 mr-2" />
                {category}
              </TabsTrigger>
            ))}
          </TabsList>
        </Tabs>

        {/* Stats */}
        <div className="mb-8">
          <Card className="bg-gradient-to-br from-blue-50 to-blue-100 dark:from-blue-950 dark:to-blue-900 border-blue-200 dark:border-blue-800 max-w-xs">
            <CardContent className="p-6">
              <div className="flex items-center justify-between">
                <div>
                  <p className="text-sm text-muted-foreground font-medium">Formations disponibles</p>
                  <p className="text-3xl font-bold text-foreground">{filteredTrainings.length}</p>
                </div>
                <BookOpen className="w-10 h-10 text-blue-600 dark:text-blue-400" />
              </div>
            </CardContent>
          </Card>
        </div>

        {/* Training Cards Grid */}
        <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
          {filteredTrainings.map(training => (
            <Card 
              key={training.id} 
              className="hover:shadow-xl transition-all duration-300 hover:-translate-y-1 flex flex-col"
            >
              <CardHeader>
                <div className="flex items-start justify-between mb-3">
                  <div className="bg-primary/10 text-primary p-3 rounded-lg">
                    {training.icon}
                  </div>
                  <Badge className={getLevelColor(training.level)}>
                    {training.level}
                  </Badge>
                </div>
                <CardTitle className="text-xl mb-2">{training.title}</CardTitle>
                <CardDescription className="text-sm line-clamp-2">
                  {training.description}
                </CardDescription>
              </CardHeader>

              <CardContent className="flex-grow">
                <div className="space-y-3 mb-4">
                  <div className="flex items-center text-sm text-muted-foreground">
                    <Clock className="w-4 h-4 mr-2" />
                    <span>{training.duration}</span>
                  </div>
                  <div className="flex items-center text-sm text-muted-foreground">
                    <Users className="w-4 h-4 mr-2" />
                    <span>{training.participants} participants</span>
                  </div>
                  <div className="flex items-center text-sm text-muted-foreground">
                    <GraduationCap className="w-4 h-4 mr-2" />
                    <span>{training.instructor}</span>
                  </div>
                  <div className="flex items-center text-sm text-muted-foreground">
                    <Calendar className="w-4 h-4 mr-2" />
                    <span>{training.dates[0]}</span>
                  </div>
                </div>

                <div className="border-t pt-4">
                  <p className="text-xs text-muted-foreground mb-2 font-medium">Ce que vous apprendrez :</p>
                  <div className="flex flex-wrap gap-1">
                    {training.features.map((feature, idx) => (
                      <Badge key={idx} variant="outline" className="text-xs">
                        {feature}
                      </Badge>
                    ))}
                  </div>
                </div>
              </CardContent>

              <CardFooter className="flex items-center justify-between pt-4 border-t">
                <div>
                  <p className="text-2xl font-bold text-primary">{training.price}</p>
                  <p className="text-xs text-muted-foreground">par personne</p>
                </div>
                <Button className="bg-primary text-primary-foreground hover:bg-primary/90">
                  S'inscrire
                </Button>
              </CardFooter>
            </Card>
          ))}
        </div>

        {/* No Results */}
        {filteredTrainings.length === 0 && (
          <div className="text-center py-16">
            <BookOpen className="w-16 h-16 mx-auto text-muted-foreground mb-4" />
            <h3 className="text-xl font-semibold mb-2">Aucune formation trouvée</h3>
            <p className="text-muted-foreground">
              Essayez de modifier vos critères de recherche
            </p>
          </div>
        )}
      </main>

      {/* Footer */}
      <footer className="border-t bg-card/50 mt-16">
        <div className="container mx-auto px-4 py-8">
          <div className="text-center text-sm text-muted-foreground">
            <p className="mb-2">© 2024 Catalogue de Formations. Tous droits réservés.</p>
            <p>Développez vos compétences avec les meilleurs experts du marché</p>
          </div>
        </div>
      </footer>
    </div>
  );
};

export default TrainingCatalog;
Our blog

Resources and insights

The latest industry news, interviews, technologies, and resources.
View all
Design
Product
Software Engineering
Customer Success
Woman speaking into mic at computer
Design

UX review presentations

How do you create compelling presentations that wow your colleagues and impress your managers?
Candice Wu
11 Jan 2022
5 min read
Man working at desk
Product

Migrating to Linear 101

Linear helps streamline software projects, sprints, tasks, and bug tracking. Here’s how to get started.
Phoenix Baker
11 Jan 2022
5 min read
Man pinning images on wall
Software Engineering

Building your API Stack

The rise of RESTful APIs has been met by a rise in tools for creating, testing, and managing them.
Olivia Rhye
11 Jan 2022
5 min read
Mountains
Product

PM mental models

Mental models are simple expressions of complex processes or relationships.
Natali Craig
11 Jan 2022
5 min read
Meeting
Design

What is Wireframing?

Introduction to Wireframing and its Principles. Learn from the best in the industry.
Drew Cano
11 Jan 2022
5 min read
Desk with computer
Software Engineering

Our top 10 Javascript frameworks to use

JavaScript frameworks make development easy with extensive features and functionalities.
Orlando Diggs
11 Jan 2022
5 min read