import { Head, Link, router } from '@inertiajs/react';
import AdminNavigation from '../../../Components/Admin/AdminNavigation';
import { Card, Col, Container, Row, Table, Badge, Button, Form, InputGroup, Dropdown } from 'react-bootstrap';
import { Plus, Search, Filter, Eye, Edit, Trash2, ToggleLeft, ToggleRight } from 'lucide-react';
import { useState } from 'react';

interface Tenant {
    id: number;
    name: string;
    slug: string;
    domain: string | null;
    plan: string;
    is_active: boolean;
    expires_at: string | null;
    created_at: string;
    users_count: number;
    clientes_count: number;
    leads_count: number;
}

interface TenantsIndexProps {
    tenants: {
        data: Tenant[];
        links: Array<{ url: string | null; label: string; active: boolean }>;
        current_page: number;
        last_page: number;
        per_page: number;
        total: number;
    };
    stats: {
        total: number;
        active: number;
        inactive: number;
        expired: number;
    };
    filters: {
        search: string | null;
        plan: string | null;
        status: string | null;
    };
    plans: string[];
}

export default function TenantsIndex({ tenants, stats, filters, plans }: TenantsIndexProps) {
    const [search, setSearch] = useState(filters.search || '');
    const [selectedPlan, setSelectedPlan] = useState(filters.plan || '');
    const [selectedStatus, setSelectedStatus] = useState(filters.status || '');

    const handleSearch = (e: React.FormEvent) => {
        e.preventDefault();
        router.get(route('admin.tenants.index'), {
            search,
            plan: selectedPlan,
            status: selectedStatus,
        }, { preserveState: true });
    };

    const clearFilters = () => {
        setSearch('');
        setSelectedPlan('');
        setSelectedStatus('');
        router.get(route('admin.tenants.index'));
    };

    const toggleStatus = (tenant: Tenant) => {
        if (confirm(`¿Estás seguro de ${tenant.is_active ? 'desactivar' : 'activar'} el tenant "${tenant.name}"?`)) {
            router.post(route('admin.tenants.toggle-status', tenant.id));
        }
    };

    const deleteTenant = (tenant: Tenant) => {
        if (confirm(`¿Estás seguro de eliminar el tenant "${tenant.name}"? Esta acción no se puede deshacer.`)) {
            router.delete(route('admin.tenants.destroy', tenant.id));
        }
    };

    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 getStatusBadge = (tenant: Tenant) => {
        if (!tenant.is_active) {
            return <Badge bg="danger">Inactivo</Badge>;
        }
        if (tenant.expires_at && new Date(tenant.expires_at) < new Date()) {
            return <Badge bg="warning">Expirado</Badge>;
        }
        return <Badge bg="success">Activo</Badge>;
    };

    return (
        <>
            <Head title="Gestión de Tenants" />
            <AdminNavigation />

            <div className="page-content">
                <Container fluid className="pt-3 pb-5">
                    {/* Header */}
                    <Row className="mb-4 align-items-center">
                        <Col>
                            <h2 className="fw-bold text-gradient mb-0">Gestión de Tenants</h2>
                            <p className="text-muted mb-0">Administra todos los tenants del sistema</p>
                        </Col>
                        <Col xs="auto">
                            <Link href={route('admin.tenants.create')}>
                                <Button variant="success" className="d-flex align-items-center gap-2">
                                    <Plus size={18} />
                                    Nuevo Tenant
                                </Button>
                            </Link>
                        </Col>
                    </Row>

                    {/* Stats Cards */}
                    <Row className="mb-4">
                        <Col md={3}>
                            <Card className="stats-card text-center">
                                <Card.Body>
                                    <h3 className="fw-bold text-primary">{stats.total}</h3>
                                    <p className="text-muted mb-0">Total</p>
                                </Card.Body>
                            </Card>
                        </Col>
                        <Col md={3}>
                            <Card className="stats-card text-center">
                                <Card.Body>
                                    <h3 className="fw-bold text-success">{stats.active}</h3>
                                    <p className="text-muted mb-0">Activos</p>
                                </Card.Body>
                            </Card>
                        </Col>
                        <Col md={3}>
                            <Card className="stats-card text-center">
                                <Card.Body>
                                    <h3 className="fw-bold text-danger">{stats.inactive}</h3>
                                    <p className="text-muted mb-0">Inactivos</p>
                                </Card.Body>
                            </Card>
                        </Col>
                        <Col md={3}>
                            <Card className="stats-card text-center">
                                <Card.Body>
                                    <h3 className="fw-bold text-warning">{stats.expired}</h3>
                                    <p className="text-muted mb-0">Expirados</p>
                                </Card.Body>
                            </Card>
                        </Col>
                    </Row>

                    {/* Filters */}
                    <Card className="filter-card mb-4">
                        <Card.Body>
                            <Form onSubmit={handleSearch}>
                                <Row className="align-items-end">
                                    <Col md={4}>
                                        <Form.Label>Buscar</Form.Label>
                                        <InputGroup>
                                            <InputGroup.Text>
                                                <Search size={16} />
                                            </InputGroup.Text>
                                            <Form.Control
                                                type="text"
                                                placeholder="Nombre, slug o dominio..."
                                                value={search}
                                                onChange={(e) => setSearch(e.target.value)}
                                            />
                                        </InputGroup>
                                    </Col>
                                    <Col md={2}>
                                        <Form.Label>Plan</Form.Label>
                                        <Form.Select
                                            value={selectedPlan}
                                            onChange={(e) => setSelectedPlan(e.target.value)}
                                        >
                                            <option value="">Todos</option>
                                            {plans.map(plan => (
                                                <option key={plan} value={plan}>
                                                    {plan.charAt(0).toUpperCase() + plan.slice(1)}
                                                </option>
                                            ))}
                                        </Form.Select>
                                    </Col>
                                    <Col md={2}>
                                        <Form.Label>Estado</Form.Label>
                                        <Form.Select
                                            value={selectedStatus}
                                            onChange={(e) => setSelectedStatus(e.target.value)}
                                        >
                                            <option value="">Todos</option>
                                            <option value="active">Activos</option>
                                            <option value="inactive">Inactivos</option>
                                            <option value="expired">Expirados</option>
                                        </Form.Select>
                                    </Col>
                                    <Col md={4}>
                                        <div className="d-flex gap-2">
                                            <Button type="submit" variant="primary">
                                                <Filter size={16} />
                                            </Button>
                                            <Button variant="outline-secondary" onClick={clearFilters}>
                                                Limpiar
                                            </Button>
                                        </div>
                                    </Col>
                                </Row>
                            </Form>
                        </Card.Body>
                    </Card>

                    {/* Tenants Table */}
                    <Card className="table-card">
                        <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>Leads</th>
                                        <th>Expiración</th>
                                        <th>Acciones</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    {tenants.data.map((tenant) => (
                                        <tr key={tenant.id}>
                                            <td>
                                                <div>
                                                    <div className="fw-semibold">{tenant.name}</div>
                                                    <small className="text-muted">
                                                        {tenant.slug}
                                                        {tenant.domain && (
                                                            <> • {tenant.domain}</>
                                                        )}
                                                    </small>
                                                </div>
                                            </td>
                                            <td>
                                                <Badge bg={getPlanColor(tenant.plan)}>
                                                    {tenant.plan}
                                                </Badge>
                                            </td>
                                            <td>{getStatusBadge(tenant)}</td>
                                            <td>{tenant.users_count}</td>
                                            <td>{tenant.clientes_count}</td>
                                            <td>{tenant.leads_count}</td>
                                            <td>
                                                {tenant.expires_at ? (
                                                    <span className={new Date(tenant.expires_at) < new Date() ? 'text-danger' : ''}>
                                                        {formatDate(tenant.expires_at)}
                                                    </span>
                                                ) : (
                                                    <span className="text-muted">Sin límite</span>
                                                )}
                                            </td>
                                            <td>
                                                <Dropdown>
                                                    <Dropdown.Toggle variant="outline-primary" size="sm">
                                                        Acciones
                                                    </Dropdown.Toggle>
                                                    <Dropdown.Menu>
                                                        <Dropdown.Item
                                                            as={Link}
                                                            href={route('admin.tenants.show', tenant.id)}
                                                        >
                                                            <Eye size={16} className="me-2" />
                                                            Ver Detalles
                                                        </Dropdown.Item>
                                                        <Dropdown.Item
                                                            as={Link}
                                                            href={route('admin.tenants.edit', tenant.id)}
                                                        >
                                                            <Edit size={16} className="me-2" />
                                                            Editar
                                                        </Dropdown.Item>
                                                        <Dropdown.Divider />
                                                        <Dropdown.Item
                                                            onClick={() => toggleStatus(tenant)}
                                                            className={tenant.is_active ? 'text-warning' : 'text-success'}
                                                        >
                                                            {tenant.is_active ? (
                                                                <>
                                                                    <ToggleLeft size={16} className="me-2" />
                                                                    Desactivar
                                                                </>
                                                            ) : (
                                                                <>
                                                                    <ToggleRight size={16} className="me-2" />
                                                                    Activar
                                                                </>
                                                            )}
                                                        </Dropdown.Item>
                                                        {tenant.slug !== 'eneon' && (
                                                            <>
                                                                <Dropdown.Divider />
                                                                <Dropdown.Item
                                                                    onClick={() => deleteTenant(tenant)}
                                                                    className="text-danger"
                                                                >
                                                                    <Trash2 size={16} className="me-2" />
                                                                    Eliminar
                                                                </Dropdown.Item>
                                                            </>
                                                        )}
                                                    </Dropdown.Menu>
                                                </Dropdown>
                                            </td>
                                        </tr>
                                    ))}
                                </tbody>
                            </Table>

                            {tenants.data.length === 0 && (
                                <div className="text-center py-5">
                                    <p className="text-muted">No se encontraron tenants.</p>
                                </div>
                            )}
                        </Card.Body>
                    </Card>

                    {/* Pagination */}
                    {tenants.last_page > 1 && (
                        <div className="d-flex justify-content-center mt-4">
                            {/* Aquí puedes agregar componente de paginación */}
                        </div>
                    )}
                </Container>
            </div>

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

                .stats-card {
                    border: none;
                    border-radius: 12px;
                    box-shadow: 0 2px 12px rgba(0,0,0,0.08);
                    transition: all 0.3s ease;
                }

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

                .filter-card {
                    border: none;
                    border-radius: 16px;
                    box-shadow: 0 2px 12px rgba(0,0,0,0.08);
                }

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

                .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>
        </>
    );
}
