import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';
import { NextResponse } from 'next/server';
import Database from 'better-sqlite3';
import path from 'path';

function getDb() {
  return new Database(path.join(process.cwd(), '..', 'data', 'bot.db'));
}

export async function GET(_: Request, { params }: { params: Promise<{ guildId: string }> }) {
  const session = await getServerSession(authOptions);
  if (!session) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });

  const { guildId } = await params;
  const db = getDb();
  const departments = db.prepare('SELECT * FROM hierarchy_departments WHERE guild_id = ? ORDER BY position ASC').all(guildId) as any[];

  const result = departments.map(dept => ({
    ...dept,
    roles: db.prepare('SELECT * FROM hierarchy_roles WHERE department_id = ? ORDER BY position ASC').all(dept.id)
  }));

  db.close();
  return NextResponse.json(result);
}

export async function POST(req: Request, { params }: { params: Promise<{ guildId: string }> }) {
  const session = await getServerSession(authOptions);
  if (!session) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });

  const { guildId } = await params;
  const { action, ...data } = await req.json();
  const db = getDb();

  if (action === 'create_department') {
    const pos = (db.prepare('SELECT MAX(position) as p FROM hierarchy_departments WHERE guild_id = ?').get(guildId) as any)?.p || 0;
    const result = db.prepare('INSERT INTO hierarchy_departments (guild_id, name, channel_id, position) VALUES (?, ?, ?, ?)').run(guildId, data.name, data.channel_id || null, pos + 1);
    db.close();
    return NextResponse.json({ success: true, id: result.lastInsertRowid });
  }

  if (action === 'update_department') {
    db.prepare('UPDATE hierarchy_departments SET name = ?, channel_id = ? WHERE id = ?').run(data.name, data.channel_id || null, data.id);
    db.close();
    return NextResponse.json({ success: true });
  }

  if (action === 'delete_department') {
    db.prepare('DELETE FROM hierarchy_roles WHERE department_id = ?').run(data.id);
    db.prepare('DELETE FROM hierarchy_departments WHERE id = ?').run(data.id);
    db.close();
    return NextResponse.json({ success: true });
  }

  if (action === 'add_role') {
    const pos = (db.prepare('SELECT MAX(position) as p FROM hierarchy_roles WHERE department_id = ?').get(data.department_id) as any)?.p || 0;
    db.prepare('INSERT INTO hierarchy_roles (department_id, role_id, position) VALUES (?, ?, ?)').run(data.department_id, data.role_id, pos + 1);
    db.close();
    return NextResponse.json({ success: true });
  }

  if (action === 'remove_role') {
    db.prepare('DELETE FROM hierarchy_roles WHERE id = ?').run(data.id);
    db.close();
    return NextResponse.json({ success: true });
  }

  db.close();
  return NextResponse.json({ error: 'Unknown action' }, { status: 400 });
}
