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 { faXTwitter } from "@fortawesome/free-brands-svg-icons"; import { notFound } from "next/navigation"; import ProtectedRoute from "./protected-route"; export interface IStreamProps { stream: IStream; } type Status = 'missing' | 'issue' | 'good'; interface StyleDef { heading: string; icon: IconDefinition; description: string; prompt: 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 selectedStatus = determineStatus(stream); const styleMap: Record = { 'missing': { heading: 'is-danger', icon: faTriangleExclamation, description: "We don't have a VOD for this stream.", prompt: 'Know someone who does?' }, 'issue': { heading: 'is-warning', icon: faCircleInfo, description: "We have a VOD for this stream, but it's not full quality.", prompt: 'Have a better copy?' }, 'good': { heading: 'is-success', icon: faThumbsUp, description: "We have a VOD for this stream, and we think it's the best quality possible.", prompt: "Have one that's even better?" } }; const { heading, icon, description, prompt } = styleMap[selectedStatus] || {}; 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
Platform {platformsList}
UTC Datetime
Local Datetime {date.toLocaleDateString()} {date.toLocaleTimeString()}
VOD {capitalizeFirstLetter(selectedStatus)}

{description}

} >

{prompt}
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.duration : }{vod.tagVodRelations.length} {vod.timestamps.length} {(!!vod.note) ? : }
}
) }