import { Button } from '@admin/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@admin/components/ui/card';
import { Badge } from '@admin/components/ui/badge';
import { Label } from '@admin/components/ui/label';
import AdminLayout from '@admin/layouts/admin/admin-layout';
import { Head, router } from '@inertiajs/react';
import { ArrowLeft, Edit, CreditCard, Building2, Package, Calendar, DollarSign, Users, Activity } from 'lucide-react';

interface Transaction {
    id: number;
    amount: number;
    status: string;
    created_at: string;
}

interface Subscription {
    id: number;
    tenant: {
        id: number;
        name: string;
        email: string;
        phone?: string;
    };
    package: {
        id: number;
        name: string;
        pricing_type: number;
    };
    start_date: string;
    end_date: string;
    amount: number;
    billing_cycle: string;
    status: string;
    user_count: number;
    transactions: Transaction[];
}

interface Props {
    subscription: Subscription;
}

export default function Show({ subscription }: Props) {
    const handleBack = () => {
        router.visit(route('admin.subscriptions.index'));
    };

    const handleEdit = () => {
        router.visit(route('admin.subscriptions.edit', subscription.id));
    };

    const handlePayment = () => {
        router.visit(route('admin.transactions.payment', subscription.id));
    };

    const getStatusBadge = (status: string) => {
        const statusConfig = {
            'Active': { variant: 'default' as const, color: 'bg-green-100 text-green-800' },
            'Inactive': { variant: 'secondary' as const, color: 'bg-gray-100 text-gray-800' },
            'Suspended': { variant: 'destructive' as const, color: 'bg-red-100 text-red-800' },
            'Expired': { variant: 'outline' as const, color: 'bg-yellow-100 text-yellow-800' },
        };

        const config = statusConfig[status as keyof typeof statusConfig] || statusConfig.Inactive;

        return (
            <Badge className={config.color}>
                {status}
            </Badge>
        );
    };

    const isExpired = new Date(subscription.end_date) < new Date();
    const daysUntilExpiry = Math.floor((new Date(subscription.end_date).getTime() - Date.now()) / (1000 * 60 * 60 * 24));

    return (
        <AdminLayout breadcrumbs={[
            { title: 'Subscription Management', href: route('admin.subscriptions.index') },
            { title: 'View Subscription', href: '#' }
        ]}>
            <Head title="View Subscription" />

            <div className="no-scrollbar rounded-xl p-4">
                <div className="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
                    <div className="grid grid-cols-1 gap-1">
                        <h2 className="text-xl font-bold sm:text-2xl">View Subscription</h2>
                        <div className="flex items-center text-sm text-gray-600">
                            <span>Administration</span>
                            <span className="mx-2">›</span>
                            <span>Subscriptions</span>
                            <span className="mx-2">›</span>
                            <span>View</span>
                        </div>
                        <div className="flex items-center gap-4 mt-2">
                            <Badge variant="outline" className="text-xs">
                                ID: {subscription.id}
                            </Badge>
                            {getStatusBadge(subscription.status)}
                            {isExpired && (
                                <Badge variant="destructive" className="text-xs">
                                    Expired
                                </Badge>
                            )}
                        </div>
                    </div>
                    <div className="flex flex-wrap gap-2 sm:gap-4">
                        <Button
                            variant="outline"
                            onClick={handleBack}
                            size="sm"
                        >
                            <ArrowLeft className="h-4 w-4 mr-2" />
                            Back to Subscriptions
                        </Button>
                        <Button
                            variant="outline"
                            onClick={handleEdit}
                            size="sm"
                        >
                            <Edit className="h-4 w-4 mr-2" />
                            Edit
                        </Button>
                        <Button
                            variant="default"
                            onClick={handlePayment}
                            size="sm"
                            className="bg-success text-white hover:bg-green-700"
                        >
                            <CreditCard className="h-4 w-4 mr-2" />
                            Process Payment
                        </Button>
                    </div>
                </div>

                <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
                    {/* Left Column - Subscription Details */}
                    <div className="space-y-6 lg:col-span-2">
                        {/* Subscription Overview */}
                        <Card>
                            <CardHeader>
                                <div className="flex items-center gap-2">
                                    <Package className="h-5 w-5 text-blue-600" />
                                    <CardTitle className="text-lg">Subscription Overview</CardTitle>
                                </div>
                                <CardDescription>
                                    Detailed information about this subscription
                                </CardDescription>
                            </CardHeader>
                            <CardContent className="space-y-6">
                                {/* Basic Information */}
                                <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
                                    <div className="space-y-4">
                                        <div className="flex items-start gap-3 p-3 bg-gray-50 rounded-lg">
                                            <Building2 className="h-5 w-5 text-gray-500 mt-0.5" />
                                            <div>
                                                <Label className="text-sm font-medium text-gray-700">Tenant</Label>
                                                <p className="text-sm font-semibold text-gray-900">{subscription.tenant.name}</p>
                                                <p className="text-xs text-gray-500">{subscription.tenant.email}</p>
                                                {subscription.tenant.phone && (
                                                    <p className="text-xs text-gray-500">{subscription.tenant.phone}</p>
                                                )}
                                            </div>
                                        </div>
                                        <div className="flex items-start gap-3 p-3 bg-gray-50 rounded-lg">
                                            <Package className="h-5 w-5 text-gray-500 mt-0.5" />
                                            <div>
                                                <Label className="text-sm font-medium text-gray-700">Package</Label>
                                                <p className="text-sm font-semibold text-gray-900">{subscription.package.name}</p>
                                                <p className="text-xs text-gray-500">
                                                    {subscription.package.pricing_type === 1 ? 'Per User' : 'Per Tenant'}
                                                </p>
                                            </div>
                                        </div>
                                    </div>
                                    <div className="space-y-4">
                                        <div className="flex items-start gap-3 p-3 bg-gray-50 rounded-lg">
                                            <Calendar className="h-5 w-5 text-gray-500 mt-0.5" />
                                            <div>
                                                <Label className="text-sm font-medium text-gray-700">Subscription Period</Label>
                                                <p className="text-sm font-semibold text-gray-900">
                                                    {new Date(subscription.start_date).toLocaleDateString()} - {new Date(subscription.end_date).toLocaleDateString()}
                                                </p>
                                                <p className="text-xs text-gray-500">
                                                    {daysUntilExpiry > 0
                                                        ? `${daysUntilExpiry} days remaining`
                                                        : daysUntilExpiry === 0
                                                            ? 'Expires today'
                                                            : `Expired ${Math.abs(daysUntilExpiry)} days ago`
                                                    }
                                                </p>
                                            </div>
                                        </div>
                                        <div className="flex items-start gap-3 p-3 bg-gray-50 rounded-lg">
                                            <DollarSign className="h-5 w-5 text-gray-500 mt-0.5" />
                                            <div>
                                                <Label className="text-sm font-medium text-gray-700">Billing</Label>
                                                <p className="text-sm font-semibold text-gray-900">${subscription.amount.toFixed(2)}</p>
                                                <p className="text-xs text-gray-500">{subscription.billing_cycle}</p>
                                            </div>
                                        </div>
                                    </div>
                                </div>

                                {/* Additional Details */}
                                <div className="border-t pt-6">
                                    <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
                                        <div className="text-center p-4 bg-blue-50 rounded-lg border border-blue-200">
                                            <Users className="h-5 w-5 text-blue-600 mx-auto mb-2" />
                                            <p className="text-sm text-blue-600 font-medium">Users</p>
                                            <p className="text-2xl font-bold text-blue-700">{subscription.user_count}</p>
                                        </div>
                                        <div className="text-center p-4 bg-green-50 rounded-lg border border-green-200">
                                            <DollarSign className="h-5 w-5 text-green-600 mx-auto mb-2" />
                                            <p className="text-sm text-green-600 font-medium">Total Amount</p>
                                            <p className="text-2xl font-bold text-green-700">${subscription.amount.toFixed(2)}</p>
                                        </div>
                                        <div className="text-center p-4 bg-purple-50 rounded-lg border border-purple-200">
                                            <Activity className="h-5 w-5 text-purple-600 mx-auto mb-2" />
                                            <p className="text-sm text-purple-600 font-medium">Status</p>
                                            <div className="mt-1">
                                                {getStatusBadge(subscription.status)}
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </CardContent>
                        </Card>

                        {/* Transaction History */}
                        <Card>
                            <CardHeader>
                                <div className="flex items-center gap-2">
                                    <Activity className="h-5 w-5 text-green-600" />
                                    <CardTitle className="text-lg">Transaction History</CardTitle>
                                </div>
                                <CardDescription>
                                    Payment history for this subscription
                                </CardDescription>
                            </CardHeader>
                            <CardContent>
                                {subscription.transactions && subscription.transactions.length > 0 ? (
                                    <div className="space-y-4">
                                        {subscription.transactions.map((transaction) => (
                                            <div key={transaction.id} className="flex items-center justify-between p-4 border rounded-lg">
                                                <div className="flex items-center gap-3">
                                                    <div className="p-2 bg-green-100 rounded-lg">
                                                        <DollarSign className="h-4 w-4 text-green-600" />
                                                    </div>
                                                    <div>
                                                        <p className="text-sm font-semibold text-gray-900">
                                                            ${transaction.amount.toFixed(2)}
                                                        </p>
                                                        <p className="text-xs text-gray-500">
                                                            {new Date(transaction.created_at).toLocaleDateString()}
                                                        </p>
                                                    </div>
                                                </div>
                                                <Badge
                                                    variant={transaction.status === 'completed' ? 'default' : 'outline'}
                                                    className="text-xs"
                                                >
                                                    {transaction.status}
                                                </Badge>
                                            </div>
                                        ))}
                                    </div>
                                ) : (
                                    <div className="text-center py-8 text-gray-500">
                                        <Activity className="h-12 w-12 mx-auto mb-4 text-gray-300" />
                                        <p className="text-sm">No transactions found for this subscription.</p>
                                    </div>
                                )}
                            </CardContent>
                        </Card>
                    </div>

                    {/* Right Column - Quick Actions & Summary */}
                    <div className="space-y-6">
                        <Card>
                            <CardHeader>
                                <CardTitle className="text-lg">Quick Actions</CardTitle>
                                <CardDescription>
                                    Common actions for this subscription
                                </CardDescription>
                            </CardHeader>
                            <CardContent className="space-y-3">
                                <Button
                                    onClick={handleEdit}
                                    className="w-full justify-start"
                                    variant="outline"
                                >
                                    <Edit className="h-4 w-4 mr-2" />
                                    Edit Subscription
                                </Button>
                                <Button
                                    onClick={handlePayment}
                                    className="w-full justify-start bg-success text-white hover:bg-green-700"
                                >
                                    <CreditCard className="h-4 w-4 mr-2" />
                                    Process Payment
                                </Button>
                            </CardContent>
                        </Card>

                        <Card>
                            <CardHeader>
                                <CardTitle className="text-lg">Subscription Summary</CardTitle>
                            </CardHeader>
                            <CardContent className="space-y-4">
                                <div className="flex justify-between items-center">
                                    <span className="text-sm text-gray-600">Status</span>
                                    {getStatusBadge(subscription.status)}
                                </div>
                                <div className="flex justify-between items-center">
                                    <span className="text-sm text-gray-600">Package</span>
                                    <span className="text-sm font-medium">{subscription.package.name}</span>
                                </div>
                                <div className="flex justify-between items-center">
                                    <span className="text-sm text-gray-600">Amount</span>
                                    <span className="text-sm font-medium">${subscription.amount.toFixed(2)}</span>
                                </div>
                                <div className="flex justify-between items-center">
                                    <span className="text-sm text-gray-600">Users</span>
                                    <span className="text-sm font-medium">{subscription.user_count}</span>
                                </div>
                                <div className="flex justify-between items-center">
                                    <span className="text-sm text-gray-600">Billing</span>
                                    <span className="text-sm font-medium">{subscription.billing_cycle}</span>
                                </div>
                                <div className="border-t pt-4">
                                    <div className="flex justify-between items-center">
                                        <span className="text-sm text-gray-600">Expires</span>
                                        <span className={`text-sm font-medium ${isExpired ? 'text-red-600' : 'text-green-600'}`}>
                                            {new Date(subscription.end_date).toLocaleDateString()}
                                        </span>
                                    </div>
                                </div>
                            </CardContent>
                        </Card>
                    </div>
                </div>
            </div>
        </AdminLayout>
    );
}