import { Request, Response, NextFunction, RequestHandler } from "express";
import bcrypt from "bcryptjs";
import { User } from "../models/User";

export class FrontendAuthController {
    checkEmail: RequestHandler = async (
    req: Request,
    res: Response,
    next: NextFunction
  ): Promise<void> => {
    try {
      const { email } = req.query;

      if (!email || typeof email !== "string") {
        res.status(400).json({ success: false, message: "Email is required" });
        return;
      }

      const result = (await User.query()
        .whereRaw(
          `LOWER(JSON_UNQUOTE(JSON_EXTRACT(user_details, '$.email'))) = LOWER(?)`,
          [email]
        )
        .count("id as count")
        .first()) as { count: number | string } | undefined;

      const exists = Number(result?.count ?? 0) > 0;
      res.json({ success: exists });
      return;
    } catch (error) {
      console.error("Error checking email:", error);
      res.status(500).json({ success: false, message: "Server error" });
      return;
    }
  };

  checkUsername: RequestHandler = async (
    req: Request,
    res: Response,
    next: NextFunction
  ): Promise<void> => {
    try {
      const { username } = req.query;

      if (!username || typeof username !== "string") {
        res
          .status(400)
          .json({ success: false, message: "Username is required" });
        return;
      }

      const result = (await User.query()
        .whereRaw(
          `LOWER(JSON_UNQUOTE(JSON_EXTRACT(user_details, '$.username'))) = LOWER(?)`,
          [username]
        )
        .count("id as count")
        .first()) as { count: number | string } | undefined;

      const exists = Number(result?.count ?? 0) > 0;
      res.json({ success: exists });
      return;
    } catch (error) {
      console.error("Error checking username:", error);
      res.status(500).json({ success: false, message: "Server error" });
      return;
    }
  };
}
