'use client'; import { IStream } from "@futureporn/types"; import { IVod } from "@/app/lib/vods"; import Link from "next/link"; import Image from "next/legacy/image"; import { LocalizedDate } from "./localized-date"; import { FontAwesomeIcon, FontAwesomeIconProps } from "@fortawesome/react-fontawesome"; import { faTriangleExclamation, faCircleInfo, faThumbsUp, IconDefinition, faO, faX, faExternalLinkAlt } from "@fortawesome/free-solid-svg-icons"; import { Hemisphere, Moon } from "lunarphase-js"; import { useEffect, useState } from "react"; import { faXTwitter } from "@fortawesome/free-brands-svg-icons"; import { notFound } from "next/navigation"; export interface IStreamProps { stream: IStream; } type Status = 'missing' | 'issue' | 'good'; interface StyleDef { heading: string; icon: IconDefinition; desc1: string; desc2: string; } function capitalizeFirstLetter(string: string): string { return string.charAt(0).toUpperCase() + string.slice(1); } function hasNote(vod: IVod) { if (!!vod?.note) return true; else return false; } function determineStatus(stream: IStream): Status { if (stream.vods.length < 1) { return 'missing' } else { if (stream.vods.some((vod: IVod) => !hasNote(vod))) { return 'good'; } else { return 'issue'; } } } export default function StreamPage({ stream }: IStreamProps) { console.log('StreamPage function has been invoked! stream as follows') console.log(stream) if (!stream) notFound() const displayName = stream.vtuber.display_name; const date = new Date(stream.date); const [hemisphere, setHemisphere] = useState(Hemisphere.NORTHERN); const [selectedStatus, setSelectedStatus] = useState(determineStatus(stream)); const styleMap: Record = { 'missing': { heading: 'is-danger', icon: faTriangleExclamation, desc1: "We don't have a VOD for this stream.", desc2: 'Know someone who does?' }, 'issue': { heading: 'is-warning', icon: faCircleInfo, desc1: "We have a VOD for this stream, but it's not full quality.", desc2: 'Have a better copy?' }, 'good': { heading: 'is-success', icon: faThumbsUp, desc1: "We have a VOD for this stream, and we think it's the best quality possible.", desc2: "Have one that's even better?" } }; const { heading, icon, desc1, desc2 } = styleMap[selectedStatus] || {}; useEffect(() => { const randomHemisphere = (Math.random() < 0.5 ? 0 : 1) ? Hemisphere.NORTHERN : Hemisphere.SOUTHERN; setHemisphere(randomHemisphere); }, []); if (!stream) return

NotFound

// // return

//

    //         
    //             {JSON.stringify(stream, null, 2)}

    //         
    //     
//

// const platformsList = [ // stream.attributes.isChaturbateStream ? 'Chaturbate' : null, // stream.attributes.isFanslyStream ? 'Fansly' : null // ].filter(Boolean).join(', '); // platformsList = platformsArray.length > 0 ? platformsArray.join(', ') : 'None'; // const platformsList = [ // (stream.attributes.isChaturbateStream && 'CB'), // (stream.attributes.isFanslyStream && 'Fansly') // ].filter(Boolean).join(', ') const platformsList = [ (stream.is_chaturbate_stream && 'CB'), (stream.is_fansly_stream && 'Fansly') ].filter(Boolean).join(', ') || '!!!'; return ( <>

{displayName} Stream Archive

{/* */}
Description Details
Announcement
Platform {platformsList}
UTC Datetime
Local Datetime {date.toLocaleDateString()} {date.toLocaleTimeString()}
Lunar Phase {Moon.lunarPhase(date)} {Moon.lunarPhaseEmoji(date, { hemisphere })}
VOD {capitalizeFirstLetter(selectedStatus)}

{desc1}

{desc2}
Upload it here.

{stream.vods.length !== 0 &&

VODs

{/* */} {stream.vods.map((vod: IVod) => ( {/*

{JSON.stringify(vod, null, 2)}

*/} {/* */} ))}
ID Upload DateThumbnail DurationTags Timestamps Note
{vod.uuid} {vod.publishedAt}{(!!vod?.attributes?.thumbnail?.data?.attributes?.cdnUrl) ? : } {(!!vod?.attributes?.duration) ? vod.attributes.duration : }{vod.tagVodRelations.length} {vod.timestamps.length} {(!!vod.note) ? : }
}
) }