'use server' import { supabase } from '@/lib/supabase' import { redirect } from 'next/navigation' import { cookies } from 'next/headers' export async function login(prevState: any, formData: FormData) { const username = formData.get('username') as string const password = formData.get('password') as string const kodeUnikNik = formData.get('kode_unik_nik') as string const remember = formData.get('remember') === 'on' if (!username || !password || !kodeUnikNik) { return { message: 'Username, password, dan Kode Unik / NIK wajib diisi' } } try { // 1. Check Petugas (Admin - Role 1/Admin) const { data: petugas, error: petugasError } = await supabase .from('petugas_posyandu') .select('*') .eq('username', username) .eq('password', password) // Plain text password check as requested .single() if (petugas) { if (petugas.kode_unik !== kodeUnikNik) { return { message: 'Kode Unik tidak valid' } } // Set session/cookie for Admin // In a real app, use a secure session library. For this demo, simple cookies. const cookieStore = await cookies() cookieStore.set('user_session', JSON.stringify({ id: petugas.id, role: 'admin', username: petugas.username, name: petugas.nama }), { secure: true, httpOnly: true, maxAge: remember ? 60 * 60 * 24 * 7 : 60 * 60 * 24 }) redirect('/dashboard') // Redirect to dashboard or appropriate page } // 2. Check Akun Balita (User - Role 2/User) const { data: user, error: userError } = await supabase .from('akun_balita') .select('*') .eq('username', username) .eq('password', password) // Plain text password check as requested .single() if (user) { if (user.NIK !== kodeUnikNik) { return { message: 'NIK tidak valid' } } // Set session/cookie for User const cookieStore = await cookies() cookieStore.set('user_session', JSON.stringify({ id: user.id, role: 'user', username: user.username, name: user.nama_orang_tua // Or nama_anak depending on preference }), { secure: true, httpOnly: true, maxAge: remember ? 60 * 60 * 24 * 7 : 60 * 60 * 24 }) redirect('/user-dashboard') // Redirect to user dashboard } return { message: 'Username atau password salah' } } catch (error: any) { if (error.message === 'NEXT_REDIRECT') { throw error } console.error('Login error:', error) return { message: 'An error occurred during login' } } } export async function logout() { const cookieStore = await cookies() cookieStore.delete('user_session') redirect('/') } export async function updatePetugas(prevState: any, formData: FormData) { const id = formData.get('id') as string const nama = formData.get('nama') as string const username = formData.get('username') as string const no_telp = formData.get('no_telp') as string const password = formData.get('password') as string if (!id || !nama || !username || !password) { return { success: false, message: 'Semua field wajib diisi.' } } try { const { error } = await supabase .from('petugas_posyandu') .update({ nama, username, no_telp, password }) .eq('id', id) if (error) throw error return { success: true, message: 'Profil berhasil diperbarui!' } } catch (error) { console.error('Error updating profile:', error) return { success: false, message: 'Gagal memperbarui profil. Coba lagi.' } } } export async function updateAkunBalita(prevState: any, formData: FormData) { const id = formData.get('id') as string const nama_orang_tua = formData.get('nama_orang_tua') as string const alamat = formData.get('alamat') as string const no_whatsapp = formData.get('no_whatsapp') as string const nama_anak = formData.get('nama_anak') as string const tanggal_lahir = formData.get('tanggal_lahir') as string const username = formData.get('username') as string const password = formData.get('password') as string if (!id || !nama_orang_tua || !nama_anak || !username || !password) { return { success: false, message: 'Field wajib tidak boleh kosong.' } } try { const { error } = await supabase .from('akun_balita') .update({ nama_orang_tua, alamat, no_whatsapp, nama_anak, tanggal_lahir: tanggal_lahir || null, username, password, }) .eq('id', id) if (error) throw error return { success: true, message: 'Data pengguna berhasil diperbarui!' } } catch (error) { console.error('Error updating akun balita:', error) return { success: false, message: 'Gagal memperbarui data pengguna. Coba lagi.' } } }