import { Head } from '@inertiajs/react';
import AdminNavigation from '../../Components/Admin/AdminNavigation';
import { Card, Col, Container, Row, Badge, Table, ProgressBar } from 'react-bootstrap';
import { Users, Building, UserCheck, Clock, TrendingUp, AlertTriangle } from 'lucide-react';

interface DashboardProps {
    stats: {
        tenants: {
            total: number;
            active: number;
            inactive: number;
            expired: number;
        };
        users: {
            total: number;
            active: number;
            admins: number;
        };
        clients: {
            total: number;
        };
        leads: {
            total: number;
        };
    };
    recentTenants: Array<{
        id: number;
        name: string;
        slug: string;
        plan: string;
        is_active: boolean;
        created_at: string;
        users_count: number;
        clientes_count: number;
    }>;
    tenantsByPlan: Record<string, number>;
    expiringSoon: Array<{
        id: number;
        name: string;
        slug: string;
        expires_at: string;
    }>;
    recentActivity: Array<{
        id: number;
        name: string;
        email: string;
        role: string;
        created_at: string;
        tenant: {
            name: string;
            slug: string;
        };
    }>;
}

export default function AdminDashboard({ stats, recentTenants, tenantsByPlan, expiringSoon, recentActivity }: DashboardProps) {
    const formatDate = (dateString: string) => {
        return new Date(dateString).toLocaleDateString('es-ES', {
            day: '2-digit',
            month: '2-digit',
            year: 'numeric'
        });
    };

    const getPlanColor = (plan: string) => {
        switch (plan) {
            case 'basic': return 'secondary';
            case 'premium': return 'primary';
            case 'enterprise': return 'success';
            default: return 'light';
        }
    };

    const getRoleColor = (role: string) => {
        switch (role) {
            case 'admin': return 'danger';
            case 'user': return 'info';
            default: return 'secondary';
        }
    };

    return (
        <>
            <Head title="Panel de Administración" />
            <AdminNavigation />

            <div className="page-content">
                <Container fluid className="pt-3 pb-5">
                    {/* Header */}
                    <Row className="mb-4">
                        <Col>
                            <div className="d-flex align-items-center gap-3 mb-3">
                                <div className="admin-icon">
                                    <Building size={32} />
                                </div>
                                <div>
                                    <h2 className="fw-bold text-gradient mb-0">Panel de Administración</h2>
                                    <p className="text-muted mb-0">Gestión global del sistema multitenant</p>
                                </div>
                            </div>
                        </Col>
                    </Row>

                    {/* Stats Cards */}
                    <Row className="mb-4">
                        <Col md={3}>
                            <Card className="stats-card border-0 h-100">
                                <Card.Body className="d-flex align-items-center">
                                    <div className="stats-icon bg-primary">
                                        <Building size={24} />
                                    </div>
                                    <div className="ms-3">
                                        <h3 className="fw-bold mb-1">{stats.tenants.total}</h3>
                                        <p className="text-muted mb-0">Tenants Total</p>
                                        <small className="text-success">
                                            {stats.tenants.active} activos
                                        </small>
                                    </div>
                                </Card.Body>
                            </Card>
                        </Col>
                        <Col md={3}>
                            <Card className="stats-card border-0 h-100">
                                <Card.Body className="d-flex align-items-center">
                                    <div className="stats-icon bg-success">
                                        <Users size={24} />
                                    </div>
                                    <div className="ms-3">
                                        <h3 className="fw-bold mb-1">{stats.users.total}</h3>
                                        <p className="text-muted mb-0">Usuarios Total</p>
                                        <small className="text-info">
                                            {stats.users.admins} administradores
                                        </small>
                                    </div>
                                </Card.Body>
                            </Card>
                        </Col>
                        <Col md={3}>
                            <Card className="stats-card border-0 h-100">
                                <Card.Body className="d-flex align-items-center">
                                    <div className="stats-icon bg-info">
                                        <UserCheck size={24} />
                                    </div>
                                    <div className="ms-3">
                                        <h3 className="fw-bold mb-1">{stats.clients.total}</h3>
                                        <p className="text-muted mb-0">Clientes Total</p>
                                        <small className="text-primary">
                                            Todos los tenants
                                        </small>
                                    </div>
                                </Card.Body>
                            </Card>
                        </Col>
                        <Col md={3}>
                            <Card className="stats-card border-0 h-100">
                                <Card.Body className="d-flex align-items-center">
                                    <div className="stats-icon bg-warning">
                                        <TrendingUp size={24} />
                                    </div>
                                    <div className="ms-3">
                                        <h3 className="fw-bold mb-1">{stats.leads.total}</h3>
                                        <p className="text-muted mb-0">Leads Total</p>
                                        <small className="text-success">
                                            Sistema completo
                                        </small>
                                    </div>
                                </Card.Body>
                            </Card>
                        </Col>
                    </Row>

                    <Row>
                        {/* Tenants por Plan */}
                        <Col md={4} className="mb-4">
                            <Card className="admin-card border-0 h-100">
                                <Card.Header className="admin-card-header">
                                    <h5 className="mb-0 fw-semibold">Distribución por Plan</h5>
                                </Card.Header>
                                <Card.Body>
                                    {Object.entries(tenantsByPlan).map(([plan, count]) => (
                                        <div key={plan} className="d-flex justify-content-between align-items-center mb-3">
                                            <div className="d-flex align-items-center">
                                                <Badge bg={getPlanColor(plan)} className="me-2">
                                                    {plan.charAt(0).toUpperCase() + plan.slice(1)}
                                                </Badge>
                                            </div>
                                            <span className="fw-semibold">{count}</span>
                                        </div>
                                    ))}
                                </Card.Body>
                            </Card>
                        </Col>

                        {/* Tenants Recientes */}
                        <Col md={8} className="mb-4">
                            <Card className="admin-card border-0 h-100">
                                <Card.Header className="admin-card-header">
                                    <h5 className="mb-0 fw-semibold">Tenants Recientes</h5>
                                </Card.Header>
                                <Card.Body className="p-0">
                                    <Table responsive className="mb-0">
                                        <thead>
                                            <tr>
                                                <th>Tenant</th>
                                                <th>Plan</th>
                                                <th>Estado</th>
                                                <th>Usuarios</th>
                                                <th>Clientes</th>
                                                <th>Creado</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            {recentTenants.map((tenant) => (
                                                <tr key={tenant.id}>
                                                    <td>
                                                        <div>
                                                            <div className="fw-semibold">{tenant.name}</div>
                                                            <small className="text-muted">{tenant.slug}</small>
                                                        </div>
                                                    </td>
                                                    <td>
                                                        <Badge bg={getPlanColor(tenant.plan)}>
                                                            {tenant.plan}
                                                        </Badge>
                                                    </td>
                                                    <td>
                                                        <Badge bg={tenant.is_active ? 'success' : 'danger'}>
                                                            {tenant.is_active ? 'Activo' : 'Inactivo'}
                                                        </Badge>
                                                    </td>
                                                    <td>{tenant.users_count}</td>
                                                    <td>{tenant.clientes_count}</td>
                                                    <td>{formatDate(tenant.created_at)}</td>
                                                </tr>
                                            ))}
                                        </tbody>
                                    </Table>
                                </Card.Body>
                            </Card>
                        </Col>
                    </Row>

                    <Row>
                        {/* Tenants Expirando */}
                        <Col md={6} className="mb-4">
                            <Card className="admin-card border-0 h-100">
                                <Card.Header className="admin-card-header d-flex align-items-center">
                                    <AlertTriangle size={20} className="text-warning me-2" />
                                    <h5 className="mb-0 fw-semibold">Expiran Pronto</h5>
                                </Card.Header>
                                <Card.Body>
                                    {expiringSoon.length > 0 ? (
                                        expiringSoon.map((tenant) => (
                                            <div key={tenant.id} className="d-flex justify-content-between align-items-center mb-3 p-2 bg-light rounded">
                                                <div>
                                                    <div className="fw-semibold">{tenant.name}</div>
                                                    <small className="text-muted">{tenant.slug}</small>
                                                </div>
                                                <Badge bg="warning">{formatDate(tenant.expires_at)}</Badge>
                                            </div>
                                        ))
                                    ) : (
                                        <p className="text-muted text-center py-3">
                                            No hay tenants expirando pronto
                                        </p>
                                    )}
                                </Card.Body>
                            </Card>
                        </Col>

                        {/* Actividad Reciente */}
                        <Col md={6} className="mb-4">
                            <Card className="admin-card border-0 h-100">
                                <Card.Header className="admin-card-header d-flex align-items-center">
                                    <Clock size={20} className="text-info me-2" />
                                    <h5 className="mb-0 fw-semibold">Actividad Reciente</h5>
                                </Card.Header>
                                <Card.Body>
                                    {recentActivity.length > 0 ? (
                                        recentActivity.map((user) => (
                                            <div key={user.id} className="d-flex justify-content-between align-items-center mb-3">
                                                <div>
                                                    <div className="fw-semibold">{user.name}</div>
                                                    <small className="text-muted">
                                                        {user.tenant.name} • {formatDate(user.created_at)}
                                                    </small>
                                                </div>
                                                <Badge bg={getRoleColor(user.role)}>
                                                    {user.role}
                                                </Badge>
                                            </div>
                                        ))
                                    ) : (
                                        <p className="text-muted text-center py-3">
                                            No hay actividad reciente
                                        </p>
                                    )}
                                </Card.Body>
                            </Card>
                        </Col>
                    </Row>
                </Container>
            </div>

            {/* Estilos */}
            <style>{`
                .text-gradient {
                    background: linear-gradient(90deg, #575A4F, #2c3e50);
                    -webkit-background-clip: text;
                    -webkit-text-fill-color: transparent;
                }

                .admin-icon {
                    width: 60px;
                    height: 60px;
                    background: linear-gradient(135deg, #575A4F, #454842);
                    border-radius: 16px;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    color: white;
                }

                .stats-card {
                    background: white;
                    border-radius: 16px;
                    box-shadow: 0 4px 20px rgba(0,0,0,0.08);
                    transition: all 0.3s ease;
                }

                .stats-card:hover {
                    transform: translateY(-2px);
                    box-shadow: 0 8px 30px rgba(0,0,0,0.12);
                }

                .stats-icon {
                    width: 50px;
                    height: 50px;
                    border-radius: 12px;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    color: white;
                }

                .admin-card {
                    background: white;
                    border-radius: 16px;
                    box-shadow: 0 4px 20px rgba(0,0,0,0.08);
                }

                .admin-card-header {
                    background: linear-gradient(135deg, #f8f9fa, #e9ecef);
                    border-bottom: 1px solid #e9ecef;
                    border-radius: 16px 16px 0 0 !important;
                    padding: 1.25rem 1.5rem;
                }

                .table th {
                    border: none;
                    background: #f8f9fa;
                    font-weight: 600;
                    color: #2c3e50;
                    padding: 1rem;
                }

                .table td {
                    border: none;
                    padding: 1rem;
                    vertical-align: middle;
                }

                .table tbody tr:hover {
                    background-color: #f8f9fa;
                }
            `}</style>
        </>
    );
}
