import type { APIRoute } from "astro";
import { app } from "../../../firebase/server";
import { app as storageApp } from '../../../firebase/client'
import { getFirestore, FieldValue } from "firebase-admin/firestore";
import { doc, setDoc, serverTimestamp } from "firebase/firestore";
 //import { getAuth } from "firebase-admin/auth";
import { getAuth, signInAnonymously, signInWithEmailAndPassword } from "firebase/auth";
import { getStorage, ref, uploadBytes, getDownloadURL } from "firebase/storage";
import { SENDTO_EMAIL } from "astro:env/client";


export const POST: APIRoute = async ({ url, request, redirect }) => {
  const formData = await request.formData();
   const name = formData.get("name")?.toString();
   const email = formData.get("email")?.toString();
  const amount = formData.get("amount")?.toString();
  const purpose = formData.get("purpose")?.toString();
  const notes = formData.get("notes")?.toString();
  const receipt = formData.get("receipt") as File;
  // const uid = formData.get("user")!.toString();

 const serverTime = serverTimestamp(); 
 const storage = getStorage(storageApp);
 const storageRef = ref(storage, receipt.name);

 const auth = getAuth();
  // const auth = getAuth(app);

  // console.log("auth=", auth)

  

  // auth.getUserByEmail(email!).then((u) => {
  // console.log("auth.........", u)
  // })
   //const decodedCookie = await auth.verifySessionCookie(sessionCookie);
//const user = await auth.getUser(decodedCookie.uid);
  if (!amount) {
    return new Response("Missing required fields", {
      status: 400,
    });
  }
  try {
    const db = getFirestore(app);
    const expensesRef = db.collection("expenses");
    const mailRef = db.collection("mail");

       //await signInAnonymously(auth);

      // auth
      //   .verifyIdToken(auth.currentUser?.getIdToken())
      //   .then((decodedToken : unknown) => {
      //     const uid = decodedToken.uid;
      //     // ...
      //     console.log("do we reach here?")
      //   })
      //   .catch((error) => {
      //     // Handle error
      //   });

      let downloadURL = ""
      if (receipt.size > 0) {
     const snapshot = await uploadBytes(storageRef, receipt);
      downloadURL = await getDownloadURL(snapshot.ref);
      }

      let id = ""

        await expensesRef.add({
      name,
      email,
      amount: amount,
      purpose,
      date: FieldValue.serverTimestamp(),
      receipt: downloadURL,
      notes
    }).then(x => {
      id = x.id
    });

   
    let emailContent = name + " has submitted an expense in the amount of $" + amount + ". " + "<a href=" + url.origin + "/expense/" + id + ">Log in now</a> to view."
   await mailRef.add({
  to: SENDTO_EMAIL,
  message: {
    subject: 'Expense Submitted',
    html: emailContent,
  },
});


  //   let receiptURL = ''
  //   if (receipt) {
  // const uploadTask = uploadBytes(storageRef, receipt)
  // .then((snapshot) => {
  // console.log('Uploaded a blob or file!', snapshot);
  // getDownloadURL(snapshot.ref).then((downloadURL) => {
  //     console.log('File available at', downloadURL);
  //     receiptURL = downloadURL;
      
  //   });



  } catch (error) {
    return new Response("Something went wrong" + error, {
      status: 500,
    });
  }
  return redirect("/");
};

