"use client";
import type React from "react";
import { useEffect, useState } from "react";
import { Button } from "@/shared/common/ui/button";
import { Input } from "@/shared/common/ui/input";
import {
ArrowLeft,
Eye,
EyeOff,
Lock,
Mail,
Phone,
User,
} from "lucide-react";
import { useAuthUser } from "@/shared/hooks/useAuthUser";
import { useTenantConfig } from "@/layout/components/TenantConfig";
import {
isValidEmail,
isValidEthiopianPhoneNum,
} from "@/record-management/common/editor/Utils";
import { Link } from "react-router-dom";
import { useTranslation } from "react-i18next";
import { useAuth } from "@/shared/context/AuthContext";
import OTPModal from "./OTPModal";
import { getRememberMePreference } from "@/shared/utils/authPersistence";
export const Login = () => {
const { login: authLogin, isLoggingIn } = useAuthUser();
const { config } = useTenantConfig();
const detectLoginMethod = (value: string): "email" | "phone" | "username" => {
if (value.includes("@") && value.includes(".com")) return "email";
if (/^\+?\d+$/.test(value)) return "phone";
return "username";
};
const [otpVerify, setOtpVerify] = useState("");
const { showOtpModal, setShowOtpModal, setRememberMePreference } = useAuth();
const [identifier, setIdentifier] = useState("");
const [password, setPassword] = useState("");
const [passwordType, setPasswordType] = useState("password");
const [phoneError, setPhoneError] = useState("");
const [rememberMe, setRememberMe] = useState(false);
const { t } = useTranslation();
useEffect(() => {
const savedRememberMe = getRememberMePreference();
setRememberMe(savedRememberMe);
setRememberMePreference(savedRememberMe);
}, [setRememberMePreference]);
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setPhoneError("");
try {
let processedIdentifier = identifier;
const loginMethod = detectLoginMethod(identifier);
if (loginMethod === "phone") {
if (!isValidEthiopianPhoneNum(processedIdentifier)) {
setPhoneError(t("auth.err"));
return;
}
if (processedIdentifier.startsWith("0")) {
processedIdentifier = "+251" + processedIdentifier.slice(1);
}
} else if (loginMethod === "email") {
if (!isValidEmail(processedIdentifier)) {
setPhoneError(t("auth.invalidEmail"));
return;
}
}
// The backend identifies users via the email field regardless of login method
const payload: { email: string; password: string } = {
email: processedIdentifier,
password,
};
setOtpVerify(processedIdentifier);
setRememberMePreference(rememberMe);
authLogin({ payload, rememberMeValue: rememberMe });
} catch (error) {
console.error("Login failed:", error);
}
};
const getInputIcon = () => {
const method = detectLoginMethod(identifier);
switch (method) {
case "email":
return (
{t("auth.enterCredentials")}
{t("auth.welcomeSubtext")}
{/* Dashboard Preview */}