// @ts-check

import { IncomingMessage } from "http";
import parseCookies from "../../utils/backend/parseCookies";
import decrypt from "../dsql/decrypt";
import getAuthCookieNames from "./cookies/get-auth-cookie-names";

export default async function (req: IncomingMessage): Promise<{
    email: string;
    password: string;
    authKey: string;
    logged_in_status: boolean;
    date: number;
} | null> {
    const { keyCookieName, csrfCookieName } = getAuthCookieNames();
    const suKeyName = `${keyCookieName}_su`;

    const cookies = parseCookies({ request: req });
    if (!cookies?.[suKeyName]) {
        return null;
    }

    /** ********************* Grab the payload */
    let userPayload = decrypt({
        encryptedString: cookies[suKeyName],
    });

    /** ********************* Return if no payload */
    if (!userPayload) return null;

    /** ********************* Parse the payload */
    let userObject = JSON.parse(userPayload);

    if (userObject.password !== process.env.DSQL_USER_KEY) return null;
    if (userObject.authKey !== process.env.DSQL_SPECIAL_KEY) return null;

    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////

    /** ********************* return user object */
    return userObject;
}