import React, { useEffect, useState, useCallback } from 'react';
import { useRouter } from 'next/router';
import { useImageProxy } from '@/hooks/useImageProxy';
import ZapDisplay from '@/components/zaps/ZapDisplay';
import { getTotalFromZaps } from '@/utils/lightning';
import { Tag } from 'primereact/tag';
import { nip19 } from 'nostr-tools';
import { useSession } from 'next-auth/react';
import GenericButton from '@/components/buttons/GenericButton';
import Image from 'next/image';
import dynamic from 'next/dynamic';
import ZapThreadsWrapper from '@/components/ZapThreadsWrapper';
import { useNDKContext } from "@/context/NDKContext";
import { useZapsSubscription } from '@/hooks/nostrQueries/zaps/useZapsSubscription';
import { findKind0Fields } from '@/utils/nostr';
import 'primeicons/primeicons.css';
import CoursePaymentButton from "@/components/bitcoinConnect/CoursePaymentButton";
import { ProgressSpinner } from 'primereact/progressspinner';
import appConfig from "@/config/appConfig";
import useWindowWidth from '@/hooks/useWindowWidth';
const MDDisplay = dynamic(
() => import("@uiw/react-markdown-preview"),
{
ssr: false,
}
);
export default function CourseDetails({ processedEvent, paidCourse, lessons, decryptionPerformed, handlePaymentSuccess, handlePaymentError }) {
const [author, setAuthor] = useState(null);
const [nAddress, setNAddress] = useState(null);
const [zapAmount, setZapAmount] = useState(0);
const [user, setUser] = useState(null);
const { zaps, zapsLoading, zapsError } = useZapsSubscription({ event: processedEvent });
const { returnImageProxy } = useImageProxy();
const { data: session, status } = useSession();
const router = useRouter();
const {ndk, addSigner} = useNDKContext();
const windowWidth = useWindowWidth();
const isMobileView = windowWidth <= 768;
useEffect(() => {
if (session) {
setUser(session.user);
}
}, [session]);
const fetchAuthor = useCallback(async (pubkey) => {
if (!pubkey) return;
const author = await ndk.getUser({ pubkey });
const profile = await author.fetchProfile();
const fields = await findKind0Fields(profile);
if (fields) {
setAuthor(fields);
}
}, [ndk]);
useEffect(() => {
if (processedEvent) {
fetchAuthor(processedEvent.pubkey);
}
}, [fetchAuthor, processedEvent]);
useEffect(() => {
if (processedEvent?.d) {
const naddr = nip19.naddrEncode({
pubkey: processedEvent.pubkey,
kind: processedEvent.kind,
identifier: processedEvent.d,
relayUrls: appConfig.defaultRelayUrls
});
setNAddress(naddr);
}
}, [processedEvent]);
useEffect(() => {
if (zaps.length > 0) {
const total = getTotalFromZaps(zaps, processedEvent);
setZapAmount(total);
}
}, [zaps, processedEvent]);
const renderPaymentMessage = () => {
if (paidCourse && !decryptionPerformed) {
return (
{processedEvent?.description}
Created by{' '} {author?.username || author?.name || author?.pubkey}