'use client';
import { useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { fetchWithAuth } from '@/utils/api';
export default function Home() {
const [formData, setFormData] = useState({
username: '',
password: '',
url: ''
});
const [error, setError] = useState('');
const [loading, setLoading] = useState(true);
const router = useRouter();
useEffect(() => {
// Check if token and API URL exist
const token = localStorage.getItem('token');
const apiUrl = localStorage.getItem('apiUrl');
if (token && apiUrl) {
// Verify token is still valid
fetchWithAuth('/api/servers')
.then(response => {
if (response.ok) {
router.push('/guilds');
} else {
// Clear invalid token
localStorage.removeItem('token');
localStorage.removeItem('apiUrl');
setLoading(false);
}
})
.catch(() => {
// Error means token is invalid or other issue
localStorage.removeItem('token');
localStorage.removeItem('apiUrl');
setLoading(false);
});
} else {
setLoading(false);
}
}, [router]);
const handleChange = (e) => {
setFormData({ ...formData, [e.target.name]: e.target.value });
};
const handleSubmit = async (e) => {
e.preventDefault();
setLoading(true);
setError('');
try {
const response = await fetch(`${formData.url}/api/login`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
username: formData.username,
password: formData.password
}),
});
const data = await response.json();
if (!response.ok) {
throw new Error(data.message || 'Login failed');
}
// Save token and API URL to localStorage
localStorage.setItem('token', data.token);
localStorage.setItem('apiUrl', formData.url);
// Redirect to guilds page
router.push('/guilds');
} catch (err) {
setError(err.message);
} finally {
setLoading(false);
}
};
if (loading) {
return (
Loading...
);
}
return (
AleeBot
{error && {error}
}
);
}