File size: 3,245 Bytes
47cf216
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
"use client"

import { useState } from "react"
import { useRouter } from "next/navigation"
import { supabase } from "@/lib/supabase"
import { Card, CardContent, CardHeader, CardTitle, CardDescription, CardFooter } from "@/components/ui/card"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Shield, Lock, AlertCircle, Mail } from "lucide-react"

export default function AdminLogin() {
  const [email, setEmail] = useState("")
  const [password, setPassword] = useState("")
  const [error, setError] = useState("")
  const [loading, setLoading] = useState(false)
  const router = useRouter()

  const handleLogin = async (e: React.FormEvent) => {
    e.preventDefault(); setLoading(true); setError("")
    const { data, error } = await supabase.auth.signInWithPassword({ email, password })
    if (error) { setError("Erreur : " + error.message); setLoading(false) } 
    else { localStorage.setItem("startech_admin_token", "authorized_access_granted"); router.push("/admin") }
  }

  return (
    <div className="min-h-screen bg-slate-50 flex items-center justify-center p-4 relative overflow-hidden text-slate-900">
      <div className="absolute inset-0 bg-[radial-gradient(circle_at_center,_var(--tw-gradient-stops))] from-blue-100 via-slate-50 to-white opacity-80"></div>
      <Card className="w-full max-w-md border-slate-200 bg-white shadow-2xl relative z-10">
        <CardHeader className="text-center space-y-4">
          <div className="mx-auto w-16 h-16 rounded-full bg-blue-50 flex items-center justify-center border border-blue-100 shadow-sm"><Lock className="w-8 h-8 text-blue-600" /></div>
          <div><CardTitle className="text-2xl font-bold tracking-tight text-slate-900">STARTECH <span className="text-blue-600">ADMIN</span></CardTitle><CardDescription className="text-slate-500">Connexion Cloud Sécurisée</CardDescription></div>
        </CardHeader>
        <form onSubmit={handleLogin}>
          <CardContent className="space-y-4">
            <div className="space-y-2"><Label htmlFor="email" className="text-slate-700">Email Admin</Label><div className="relative"><Mail className="absolute left-3 top-3 h-4 w-4 text-slate-400" /><Input id="email" type="email" placeholder="admin@startech.com" className="pl-10" value={email} onChange={e => setEmail(e.target.value)} required /></div></div>
            <div className="space-y-2"><Label htmlFor="password" className="text-slate-700">Mot de passe</Label><div className="relative"><Shield className="absolute left-3 top-3 h-4 w-4 text-slate-400" /><Input id="password" type="password" placeholder="••••••••" className="pl-10" value={password} onChange={e => setPassword(e.target.value)} required /></div></div>
            {error && <div className="flex items-center gap-2 text-red-600 text-sm bg-red-50 p-3 rounded-md border border-red-100"><AlertCircle className="w-4 h-4" />{error}</div>}
          </CardContent>
          <CardFooter><Button type="submit" className="w-full bg-blue-600 hover:bg-blue-700 text-white" disabled={loading}>{loading ? "Connexion..." : "Se connecter"}</Button></CardFooter>
        </form>
      </Card>
    </div>
  )
}