// src/routes/login/+server.ts
import type { RequestHandler } from './$types';
import { json } from '@sveltejs/kit';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
import pool from '$lib/server/database';
import { JWT_SECRET } from '$env/static/private';

export const POST: RequestHandler = async ({ request, cookies }) => {
	try {
		const { login_id, password } = await request.json();

		// 1. 입력 값 유효성 검사
		if (!login_id || !password) {
			return json({ error: '아이디와 비밀번호를 모두 입력하세요.' }, { status: 400 });
		}

		// 2. 데이터베이스에서 사용자 정보 조회
		const result = await pool.query('SELECT * FROM "Worker" WHERE login_id = $1', [login_id]);
		const workerRecord = result.rows[0];

		if (!workerRecord) {
			return json({ error: '아이디 또는 비밀번호가 일치하지 않습니다.' }, { status: 401 });
		}

		// 3. 입력된 비밀번호와 DB에 저장된 해시 비밀번호 비교
		const isPasswordValid = await bcrypt.compare(password, workerRecord.password_hash);

		if (!isPasswordValid) {
			return json({ error: '아이디 또는 비밀번호가 일치하지 않습니다.' }, { status: 401 });
		}

		// 4. 로그인 성공, JWT 토큰 생성
		const workerPayload = {
			id: workerRecord.workerid,
			login_id: workerRecord.login_id,
			name: workerRecord.workername
		};

		const token = jwt.sign(workerPayload, JWT_SECRET, { expiresIn: '7d' });

		// 5. 토큰을 쿠키에 저장
		cookies.set('session', token, {
			path: '/',
			httpOnly: true,
			// 개발 환경에서는 false, 프로덕션에서는 true로 설정하는 것이 좋습니다.
			secure: process.env.NODE_ENV === 'production',
			// 7 days
			maxAge: 60 * 60 * 24 * 7,
			sameSite: 'lax'
		});

		return json({ success: true, worker: workerPayload });
	} catch (err) {
		console.error('로그인 실패:', err);
		return json({ error: '서버 내부 오류가 발생했습니다.' }, { status: 500 });
	}
};
