'use client' import { useRef, useState } from 'react' import { FileText, Loader2, Printer } from 'lucide-react' import { getPetugasLokalByPosyandu } from './action-jadwal' import { showSwal } from '@/lib/swal' interface PetugasLokal { nama_petugas: string nomor_hp: string jabatan: string } interface JadwalData { id: string tanggal: string jam_mulai: string jam_selesai: string diedit_oleh: string posyandu_id: string detail_posyandu: { nama_posyandu: string alamat: string } } interface Props { jadwal: JadwalData currentAdmin: string } export function CetakPDFJadwal({ jadwal, currentAdmin }: Props) { const [loading, setLoading] = useState(false) const templateRef = useRef(null) const [petugas, setPetugas] = useState([]) const now = new Date() const tglCetak = now.toLocaleDateString('id-ID', { day: 'numeric', month: 'long', year: 'numeric' }) const jamCetak = now.toLocaleTimeString('id-ID', { hour: '2-digit', minute: '2-digit' }) const tglJadwal = new Date(jadwal.tanggal).toLocaleDateString('id-ID', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }) const handlePrint = async () => { setLoading(true) try { // 1. Fetch Local Officers first const res = await getPetugasLokalByPosyandu(jadwal.posyandu_id) if (res.success) { setPetugas(res.petugas || []) } // Small delay to ensure state update renders in the hidden div await new Promise(r => setTimeout(r, 300)) const { default: html2canvas } = await import('html2canvas') const { default: jsPDF } = await import('jspdf') if (!templateRef.current) throw new Error('Template not found') const canvas = await html2canvas(templateRef.current, { scale: 2, useCORS: true, backgroundColor: '#ffffff', logging: false, }) const imgData = canvas.toDataURL('image/png') const pdf = new jsPDF('p', 'mm', 'a4') const pageW = pdf.internal.pageSize.getWidth() const imgH = (canvas.height * pageW) / canvas.width pdf.addImage(imgData, 'PNG', 0, 0, pageW, imgH) pdf.save(`Jadwal_${jadwal.detail_posyandu.nama_posyandu.replace(/ /g, '_')}_${jadwal.tanggal}.pdf`) } catch (err: any) { showSwal.error('Gagal!', `Gagal mencetak PDF: ${err.message}`) } finally { setLoading(false) } } return ( <> {/* ─── Hidden PDF Template ─── */}
{/* Header: Kop Surat Style */}
Pemerintah Kabupaten / Kota
DINAS KESEHATAN & POSYANDU
Nomor Dokumen
JDWL-{jadwal.id.slice(0, 8).toUpperCase()}

SURAT PEMBERITAHUAN JADWAL PELAKSANAAN

{/* Informasi Utama */}
A. DETAIL POSYANDU
Nama Posyandu
{jadwal.detail_posyandu.nama_posyandu}
Alamat Lokasi
{jadwal.detail_posyandu.alamat}
B. WAKTU PELAKSANAAN
Hari & Tanggal
{tglJadwal}
Sesi Operasional
{jadwal.jam_mulai.slice(0, 5)} - {jadwal.jam_selesai.slice(0, 5)} WIB
{/* Tabel Petugas */}
C. DAFTAR PETUGAS LOKAL BERTUGAS
{petugas.length > 0 ? petugas.map((p, i) => ( )) : ( )}
Nama Petugas Nomor Telepon Jabatan
{p.nama_petugas} {p.nomor_hp} {p.jabatan}
Belum ada petugas lokal yang terdaftar untuk Posyandu ini.
{/* Catatan Penting */}
⚠️ CATATAN SISTEM

"Dimohon agar aktivitas program pengecekan stunting di setiap Posyandu dijalankan sesuai dengan waktu dan sesi yang tertera dalam jadwal, guna mendukung pemeliharaan sistem yang baik."

{/* Footer / Metadata */}
Metode Penjadwalan:
Sistem Penjadwalan Otomatis (Algoritma Random Batch)
Ditentukan oleh Admin: {jadwal.diedit_oleh.replace('[HISTORY] ', '')}
Detail Pengunduhan:
Dicetak oleh Admin: {currentAdmin}
Waktu Cetak: {tglCetak}, {jamCetak} WIB
DOKUMEN INI DIHASILKAN SECARA OTOMATIS OLEH SISTEM CLOUD STUNTING
{/* ─── Visible Button ─── */} ) }