const { PrismaClient } = require('@prisma/client');
require('dotenv').config();

const prisma = new PrismaClient();

async function main() {
  console.log('Testing Prisma follow-up creation...');
  try {
    // 1. Fetch a user and client to get valid IDs
    const user = await prisma.user.findFirst();
    const client = await prisma.client.findFirst();
    
    if (!user || !client) {
      console.error('Could not find user or client in DB to test. Make sure db is seeded.');
      return;
    }
    
    console.log(`Using User ID: ${user.id}, Client ID: ${client.id}`);
    
    // 2. Mock a CreateFollowupDto payload
    const createDto = {
      userId: user.id,
      clientId: client.id,
      notes: 'Test notes',
      date: new Date().toISOString(),
      status: 'PENDING',
      type: 'FOLLOWUP',
      stage: 'LEAD',
    };
    
    console.log('Inserting followup via Prisma...');
    const followup = await prisma.followup.create({
      data: createDto,
      include: { client: true }
    });
    console.log('Followup created successfully:', followup.id);
    
    // 3. Mock notification raw query
    console.log('Inserting notification via raw query...');
    const notifId = require('crypto').randomUUID();
    const metaStr = null;
    const title = 'New Follow-up Assigned 📅';
    const body = `You have been assigned a new follow-up task for client. Deadline: ${new Date(createDto.date).toLocaleString()}`;
    const type = 'FOLLOWUP_ASSIGNED';
    
    await prisma.$executeRaw`
      INSERT INTO notification (id, userId, title, body, type, metadata)
      VALUES (${notifId}, ${user.id}, ${title}, ${body}, ${type}, ${metaStr})
    `;
    console.log('Notification raw insert succeeded!');
    
    // Clean up
    console.log('Cleaning up test data...');
    await prisma.followup.delete({ where: { id: followup.id } });
    await prisma.$executeRaw`
      DELETE FROM notification WHERE id = ${notifId}
    `;
    console.log('Clean up done.');
  } catch (error) {
    console.error('Error encountered:', error);
  } finally {
    await prisma.$disconnect();
  }
}

main();
