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}
${
showExtraResources
? `
Extra Resources
${
slideUrl
? ``
: ''
}
${
video && video.length > 0
? `
Video Link:
${video
.map(
(videoData, index) => `
- ${videoData}
`
)
.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);
}