import type { TCourseDownloadContent } from '@api/types/course'; import { getCloudflarePdfBuffer } from '@api/utils/cloudflare'; import { marked } from 'marked'; function getHtmlTemplate(body: string): string { return ` Lesson Note ${body} `; } type TLessonBody = TCourseDownloadContent['lessons'][0]; function getLessonBody( { lessonTitle, lessonNumber, lessonNote, slideUrl, video }: TLessonBody, orgName: string, orgTheme: string ): string { const noteHtml = marked.parse(lessonNote); const showExtraResources = slideUrl || (video && video.length > 0); return `

${lessonNumber}

${lessonTitle}

By ${orgName}

${noteHtml}
${ showExtraResources ? `

Extra Resources

${ slideUrl ? `

Slide Link:

Open Here
` : '' } ${ video && video.length > 0 ? `

Video Link:

    ${video .map( (videoData, index) => `
  1. ${videoData}
  2. ` ) .join('')}
` : '' }
` : '' }
`; } function getCourseBody({ courseTitle, orgName, orgTheme, lessons }: TCourseDownloadContent): string { return `

${courseTitle}

${orgName}

${lessons.map((lesson) => getLessonBody(lesson, orgName, orgTheme)).join('')}
`; } async function generateSinglePdfFromHtml( htmlContent: string, courseTitle: string, orgTheme: string ): Promise { return await getCloudflarePdfBuffer(htmlContent); } export async function generateCoursePdf(params: TCourseDownloadContent): Promise { const body = getCourseBody(params); const html = getHtmlTemplate(body); console.log(html); return await generateSinglePdfFromHtml(html, params.courseTitle, params.orgTheme); }