<script setup lang="ts">
import { Head, Link } from '@inertiajs/vue3';
import { route } from 'ziggy-js';
import AppLayout from '@/layouts/AppLayout.vue';

const props = defineProps<{
    dynamic: {
        id: number;
        name: string;
    };
    participant: {
        id: number;
        name: string;
        display_name: string | null;
        role: string;
    };
    mutations: Array<{
        id: number;
        amount: number;
        description: string;
        status: string;
        created_at: string;
        ledger: { id: number; name: string };
    }>;
}>();

const breadcrumbs = [
    {
        name: 'Dynamics',
        href: route('dynamics.index'),
    },
    {
        name: props.dynamic.name,
        href: route('dynamics.show', props.dynamic.id),
    },
    {
        name: props.participant.display_name ?? props.participant.name,
        href: route('dynamics.users.show', [props.dynamic.id, props.participant.id]),
    },
];
</script>

<template>
    <Head :title="participant.display_name ?? participant.name" />

    <AppLayout :breadcrumbs="breadcrumbs">
        <div class="c-participant-show">
            <div class="c-participant-show__container">
                <h2 class="c-participant-show__title">
                    Activity for {{ participant.display_name ?? participant.name }} ({{ participant.role.toUpperCase() }}) in {{ dynamic.name }}
                </h2>

                <div class="c-participant-show__activity-list">
                    <div
                        v-for="mutation in mutations"
                        :key="mutation.id"
                        class="c-participant-show__activity-item"
                    >
                        <Link :href="route('dynamics.ledgers.show', [dynamic.id, mutation.ledger.id])" class="block">
                            <div class="c-participant-show__activity-meta">
                                <span class="c-participant-show__activity-time">
                                    {{ new Date(mutation.created_at).toLocaleString() }}
                                </span>
                                <span class="font-semibold ml-2" :class="mutation.amount > 0 ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400'">
                                    {{ mutation.amount > 0 ? '+' : '' }}{{ mutation.amount }}
                                </span>
                                <span class="text-neutral-400 ml-2">on {{ mutation.ledger.name }}</span>
                                <span class="uppercase text-xs px-1.5 py-0.5 rounded ml-auto" :class="mutation.status === 'approved' ? 'bg-green-100 text-green-700 dark:bg-green-950/30 dark:text-green-400' : 'bg-yellow-100 text-yellow-700 dark:bg-yellow-950/30 dark:text-yellow-400'">
                                    {{ mutation.status }}
                                </span>
                            </div>
                            <p class="c-participant-show__activity-desc">
                                {{ mutation.description }}
                            </p>
                        </Link>
                    </div>
                    <div v-if="mutations.length === 0" class="text-neutral-500 text-sm">
                        No mutations recorded for this participant in this Dynamic yet.
                    </div>
                </div>
            </div>
        </div>
    </AppLayout>
</template>

<style scoped>
@reference "../../../../css/app.css";

.c-participant-show {
    @apply py-12;
}

.c-participant-show__container {
    @apply mx-auto max-w-7xl sm:px-6 lg:px-8;
}

.c-participant-show__title {
    @apply mb-6 text-xl font-bold tracking-tight text-neutral-900 dark:text-neutral-100;
}

.c-participant-show__activity-list {
    @apply space-y-4;
}

.c-participant-show__activity-item {
    @apply rounded-lg border p-4 transition-colors hover:bg-neutral-50 dark:border-neutral-800 dark:hover:bg-neutral-900;
    background-color: var(--card);
}

.c-participant-show__activity-meta {
    @apply mb-1.5 flex items-center text-xs;
}

.c-participant-show__activity-time {
    @apply text-neutral-400 dark:text-neutral-500;
}

.c-participant-show__activity-desc {
    @apply text-sm text-neutral-600 dark:text-neutral-400 mt-1;
}
</style>
