import { db } from "@/app/lib/db";
import { NextResponse } from "next/server";
import { getUserFromSession } from "@/app/lib/auth";

export async function GET(req) {
    const id = req.nextUrl.searchParams.get('id');

    const { user } = await getUserFromSession();

    if (!user) {
        return NextResponse.json({ error: 'Vous devez être connecté pour accéder à cette ressource' }, { status: 401 });
    }

    if (!id) {
        const [rows] = await (await db).query('SELECT * FROM gares WHERE USER_ID = ? ORDER BY NAME ASC', [user.USER_ID]);
        return NextResponse.json(rows);
    }

    const [rows] = await (await db).query('SELECT * FROM gares WHERE id = ? AND USER_ID = ?', [id, user.USER_ID]);


    if (rows.length === 0) {
        return NextResponse.json({ error: 'La gare demandée n\'existe pas ou vous n\'avez pas les droits pour y accéder' }, { status: 404 });
    }

    return NextResponse.json(rows[0]);
}

export async function POST(req) {
    const { user } = await getUserFromSession();

    if (!user) {
        return NextResponse.json({ error: 'Vous devez être connecté pour accéder à cette ressource' }, { status: 401 });
    }

    const { name, folder, infos, infos_type, shared, copy } = await req.json();
    
    const id = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);

    const [rows] = await (await db).query('INSERT INTO gares (ID, USER_ID, NAME, FOLDER, INFOS, INFOS_TYPE, SHARED, CAN_COPY) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', [id, user.USER_ID, name, folder, infos, infos_type, shared, copy]);

    return NextResponse.json({ id: id });
}

export async function PATCH(req) {
    const id = req.nextUrl.searchParams.get('id');
    const { user } = await getUserFromSession();

    if (!user) {
        return NextResponse.json({ error: 'Vous devez être connecté pour accéder à cette ressource' }, { status: 401 });
    }

    const { name, folder, shared, infos_type, infos } = await req.json();
    var query = []

    if (name) query.push(`NAME = '${name}'`);
    if (folder) query.push(`FOLDER = '${folder}'`);
    if (shared) query.push(`SHARED = '${shared}'`);
    if (infos_type) query.push(`INFOS_TYPE = '${infos_type}'`);
    if (infos) query.push(`INFOS = '${infos}'`);

    const [rows] = await (await db).query(`UPDATE gares SET ${query.join(', ')} WHERE ID = ? AND USER_ID = ?`, [id, user.USER_ID]);

    if (rows.affectedRows === 0) {
        return NextResponse.json({ error: 'La gare demandée n\'existe pas ou vous n\'avez pas les droits pour y accéder' }, { status: 404 });
    }

    return NextResponse.json({ success: true });
}