import { Head, Link, router } from '@inertiajs/react';
import { ConfirmDialog } from '@/components/admin/confirm-dialog';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { useState } from 'react';

interface Subscription {
    id: number;
    status: string;
    starts_at: string | null;
    ends_at: string | null;
    created_at: string;
    updated_at: string;
    user: {
        id: number;
        name: string;
        email: string;
        title: string | null;
        profession: string | null;
    } | null;
    tier: {
        id: number;
        name: string;
        price_usd: number;
        duration: string;
    } | null;
}

const statusVariant: Record<string, 'default' | 'secondary' | 'destructive' | 'outline'> = {
    active: 'default',
    expired: 'secondary',
    cancelled: 'destructive',
    pending: 'outline',
};

export default function SubscriptionsShow({ subscription }: { subscription: Subscription }) {
    const [confirmCancel, setConfirmCancel] = useState(false);

    return (
        <>
            <Head title="Subscription Details" />
            <div className="space-y-6">
                <div className="flex items-center gap-4">
                    <Button variant="ghost" size="sm" asChild>
                        <Link href="/admin/subscriptions">← Back</Link>
                    </Button>
                    <div className="flex items-center gap-3">
                        <h1 className="text-2xl font-bold">Subscription #{subscription.id}</h1>
                        <Badge variant={statusVariant[subscription.status] ?? 'secondary'}>
                            {subscription.status.charAt(0).toUpperCase() + subscription.status.slice(1)}
                        </Badge>
                    </div>
                </div>

                <div className="grid gap-6 md:grid-cols-2">
                    <Card>
                        <CardHeader><CardTitle>Member</CardTitle></CardHeader>
                        <CardContent className="space-y-2">
                            {subscription.user ? (
                                <>
                                    <div className="flex justify-between text-sm">
                                        <span className="text-muted-foreground">Name</span>
                                        <Link href={`/admin/users/${subscription.user.id}/edit`} className="font-medium hover:underline">
                                            {subscription.user.name}
                                        </Link>
                                    </div>
                                    <div className="flex justify-between text-sm">
                                        <span className="text-muted-foreground">Email</span>
                                        <span className="font-medium">{subscription.user.email}</span>
                                    </div>
                                    {subscription.user.title && (
                                        <div className="flex justify-between text-sm">
                                            <span className="text-muted-foreground">Title</span>
                                            <span>{subscription.user.title}</span>
                                        </div>
                                    )}
                                    {subscription.user.profession && (
                                        <div className="flex justify-between text-sm">
                                            <span className="text-muted-foreground">Profession</span>
                                            <span>{subscription.user.profession}</span>
                                        </div>
                                    )}
                                </>
                            ) : (
                                <p className="text-sm text-muted-foreground">User deleted.</p>
                            )}
                        </CardContent>
                    </Card>

                    <Card>
                        <CardHeader><CardTitle>Tier</CardTitle></CardHeader>
                        <CardContent className="space-y-2">
                            {subscription.tier ? (
                                <>
                                    <div className="flex justify-between text-sm">
                                        <span className="text-muted-foreground">Name</span>
                                        <span className="font-medium">{subscription.tier.name}</span>
                                    </div>
                                    <div className="flex justify-between text-sm">
                                        <span className="text-muted-foreground">Price</span>
                                        <span>{subscription.tier.price_usd === 0 ? 'Free' : `$${Number(subscription.tier.price_usd).toFixed(2)}`}</span>
                                    </div>
                                    <div className="flex justify-between text-sm">
                                        <span className="text-muted-foreground">Duration</span>
                                        <span className="capitalize">{subscription.tier.duration}</span>
                                    </div>
                                </>
                            ) : (
                                <p className="text-sm text-muted-foreground">Tier deleted.</p>
                            )}
                        </CardContent>
                    </Card>

                    <Card>
                        <CardHeader><CardTitle>Dates</CardTitle></CardHeader>
                        <CardContent className="space-y-2">
                            <div className="flex justify-between text-sm">
                                <span className="text-muted-foreground">Created</span>
                                <span>{new Date(subscription.created_at).toLocaleDateString()}</span>
                            </div>
                            <div className="flex justify-between text-sm">
                                <span className="text-muted-foreground">Starts</span>
                                <span>{subscription.starts_at ? new Date(subscription.starts_at).toLocaleDateString() : '—'}</span>
                            </div>
                            <div className="flex justify-between text-sm">
                                <span className="text-muted-foreground">Expires</span>
                                <span>{subscription.ends_at ? new Date(subscription.ends_at).toLocaleDateString() : 'Lifetime'}</span>
                            </div>
                        </CardContent>
                    </Card>
                </div>

                {subscription.status === 'active' && (
                    <div className="flex justify-end">
                        <Button variant="destructive" onClick={() => setConfirmCancel(true)}>
                            Cancel Subscription
                        </Button>
                    </div>
                )}
            </div>

            <ConfirmDialog
                open={confirmCancel}
                onOpenChange={setConfirmCancel}
                title="Cancel subscription?"
                description="This will immediately end the member's active subscription. They will lose access to member benefits."
                confirmLabel="Cancel Subscription"
                variant="danger"
                onConfirm={() =>
                    router.post(`/admin/subscriptions/${subscription.id}/cancel`, {}, {
                        onSuccess: () => setConfirmCancel(false),
                    })
                }
            />
        </>
    );
}
