// import { serve } from "https://deno.land/x/sift@0.5.0/mod.ts";
//import { SESClient, SendEmailCommand } from "npm:@aws-sdk/client-ses"
import { createClient } from 'npm:@supabase/supabase-js'
import { SmtpClient } from "https://deno.land/x/smtp@v0.7.0/mod.ts"
 
const supabaseUrl = Deno.env.get("SUPABASE_URL")!;
const supabaseServiceKey = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!;
// const region = Deno.env.get("AWS_REGION") || "eu-west-1";
// const awsAccessKeyId = Deno.env.get("AWS_SES_KEY_ID2");
// const awsSecretAccessKey = Deno.env.get("AWS_SES_SECRET_KEY2");
const sesFromEmail = "no-reply@simpleflowhub.app";
// SMTP settings for Amazon SES
const smtpHost = "email-smtp.eu-west-1.amazonaws.com";
const smtpPort = 587;
const smtpUser = "AKIAQKGGXA7N2P2BVEES";
const smtpPassword = "BMgN6oiVikRdiGDqpQFrglT5Bp7VbC5BljPRSWRO+G0s";


// Set up the SMTP client for SES
const client = new SmtpClient();

// Function to send email via SES SMTP
async function sendEmail(to: string, subject: string, body: string) {
  await client.connect({
    hostname: smtpHost,
    port: smtpPort,
    username: smtpUser,
    password: smtpPassword,
    // Amazon SES requires TLS
    //tls: true,
    starttls: true,
  });

  await client.send({
    from: sesFromEmail,
    to,
    subject,
    content: body,
  });

  await client.close();
}

// Initialize Supabase client
const supabase = createClient(supabaseUrl, supabaseServiceKey);


// Function to get unsent emails from the `send_que` table
async function getUnsentEmails() {
  const { data, error } = await supabase
    .from("send_que")
    .select("*")
    .eq("status", 0); // Assuming "status" is the field marking unsent emails

  if (error) {
    console.error("Error fetching unsent emails:", error);
    return [];
  }

  return data || [];
}

// Function to update the email status in the `send_que` table
async function updateEmailStatus(id: number, status: number) {
  const { error } = await supabase
    .from("send_que")
    .update({ status })
    .eq("id", id);

  if (error) {
    console.error(`Error updating email status for ID ${id}:`, error);
  }
}

// Main function to process email queue
async function processEmailQueue() {
  const unsentEmails = await getUnsentEmails();

  for (const email of unsentEmails) {
    try {
      // Send email via SES
      await sendEmail(email.recipient, email.subject, email.body);

      // Update email status to "sent"
      await updateEmailStatus(email.id, 1);
      console.log(`Email sent successfully to ${email.recipient}`);
    } catch (err) {
      console.error(`Failed to send email to ${email.recipient}:`, err);
      
      // Optionally, mark email as "failed" if it couldn't be sent
      await updateEmailStatus(email.id, 2);
    }
  }
}

// Edge function that will run every time it's triggered
Deno.serve(async () => {
  try {
    await processEmailQueue();
    return new Response("Email queue processed successfully", { status: 200 });
  } catch (error) {
    console.error("Error processing email queue:", error);
    return new Response("Error processing email queue", { status: 500 });
  }
});
