import { useNavigate } from "react-router";
import { useAuthSlice } from "@/app/providers";
import { useOrderStore } from "@/entities/order";
import { checkPermission } from "@/shared/lib/RBAC";
import { Button } from "@/shared/ui/button";
import { isEventPassed } from "../lib/eventPassed";
import { Redeem } from "./Redeem";
import { ShowTicket } from "./ShowTicket";
import type { Event } from "@/entities/event";
import type { User } from "@/entities/user";
type TicketProps = {
user: User;
event: Event;
};
export const Ticket: React.FC<TicketProps> = ({ user, event }) => {
const navigate = useNavigate();
const { user: authUser } = useAuthSlice();
const { setTicketOrder } = useOrderStore();
if (event.status !== "approved") return null;
const tickets = user.tickets.filter((ticket) => ticket.eventId === event.id);
const hasPassed = isEventPassed(event.startDateTimestamp, event.daysAmount);
const isCreator = user.address === event.creator.address;
function handleGetTicketClick() {
if (!authUser) return;
// Check if user has socials
if (authUser.socials.length === 0) {
navigate("/socials");
return;
}
// Set the order with multi-ticket support
setTicketOrder({
eventId: event.id,
eventTitle: event.title,
ticketPrice: BigInt(event.ticketPrice),
totalTickets: 1,
allocations: [],
});
// Navigate directly to purchase page
navigate("/purchase");
}
if (checkPermission(user.roles, "ticket:redeem"))
return <Redeem eventId={event.id} />;
if (isCreator) return null;
return (
<>
{tickets.length > 0 ? (
<ShowTicket hasPassed={hasPassed} tickets={tickets} event={event} />
) : (
<Button
className="w-full"
disabled={hasPassed}
onClick={handleGetTicketClick}
>
Get ticket
</Button>
)}
</>
);
};