const express = require('express');
const session = require('express-session');
const {
	createUser, authenticateUser,
	getBookmarks, addBookmark, deleteBookmark
} = require('./db');
// ExpressのRouterを作成
const router = express.Router();
// セッション管理のミドルウェアを設定
router.use(session({
	secret: 'your-secret-key',
	resave: false,
	saveUninitialized: false
}));
// ユーザー関連のAPIエンドポイント
// ログイン用のAPIエンドポイント
router.post('/login', async (req, res) => {
	const { username, password } = req.body; // ユーザー名とパスワードを取得
	// ユーザー認証を行う
	const authenticated = await authenticateUser(username, password);
	// ユーザー認証されているか確認
	if (authenticated) {
		req.session.username = username; // セッションにユーザー名を保存
		res.status(200).send('Login successful'); // 成功メッセージを返す
	} else {
		res.status(401).send('Invalid credentials'); // 認証失敗時のエラーメッセージ
	}
});
// ログアウト用のAPIエンドポイント
router.post('/logout', (req, res) => {
	req.session.destroy((err) => { // セッションを破棄
		if (err) {
			res.status(500).send('Error logging out'); // エラー時のエラーメッセージ
		} else {
			res.status(200).send('Logout successful'); // 成功メッセージを返す
		}
	});
});

// ブックマーク関連のAPIエンドポイント
// ブックマークを取得するAPIエンドポイント
router.get('/bookmarks', async (req, res) => {
	// セッションにユーザー名があるか確認
	if (!req.session.username) {
		return res.status(401).send('Unauthorized');
	}
	// ユーザーのブックマークを取得
	const bookmarks = await getBookmarks(req.session.username);
	res.json(bookmarks); // ブックマークをJSON形式で返す
});
// ブックマークを追加するAPIエンドポイント
router.post('/bookmarks', async (req, res) => {
	// セッションにユーザー名があるか確認
	if (!req.session.username) {
		return res.status(401).send('Unauthorized');
	}
	// 新しいブックマークを追加
	await addBookmark(req.session.username, req.body);
	res.status(201).send('Bookmark added'); // 成功メッセージ
});
// ブックマークを削除するAPIエンドポイント
router.delete('/bookmarks/:id', async (req, res) => {
	// セッションにユーザー名があるか確認
	if (!req.session.username) {
		return res.status(401).send('Unauthorized');
	}
	// 指定されたIDのブックマークを削除
	await deleteBookmark(req.params.id);
	res.status(200).send('Bookmark deleted'); // 成功メッセージ
});
module.exports = router;