import prismadb from "@/lib/prisma";
import { NextResponse } from "next/server";

import { getServerSession } from "next-auth";

export async function GET(
  req: Request,
  { params }: { params: { statusId: string } }
) {
  try {

    if (!params.statusId) {
      return new NextResponse("Id de statut requise", { status: 400 });
    }

    const status = await prismadb.status.findUnique({
      where: {
        id: params.statusId,
      }
    });

    return NextResponse.json(status);
  } catch (error) {
    console.log('[STATUS_GET]', error);
    return new NextResponse("Internal error", { status: 500 })
  }
};

export async function PATCH(
  req: Request,
  { params }: { params: { storeId: string, statusId: string } }
) {
  try {
    const session = await getServerSession();
    const userId = session?.user?.email;

    const body = await req.json();

    const { name, color, email } = body;

    if (!userId) {
      return new NextResponse("Non authentifié", { status: 401 });
    }

    if (!name) {
      return new NextResponse("Nom requis", { status: 400 });
    }

    if (!color) {
      return new NextResponse("Couleur requise", { status: 400 });
    }

    if (!params.statusId) {
      return new NextResponse("Id de statut requise", { status: 400 });
    }

    const storeByUserId = await prismadb.store.findFirst({
      where: {
        id: params.storeId,
      },
      include: {
        userToStore: {
          where: {
            userId: userId
          }
        }
      }
    });

    if (!storeByUserId) {
      return new NextResponse("Non autorisé", { status: 403 });
    }

    const status = await prismadb.status.updateMany({
      where: {
        id: params.statusId,
      },
      data: {
        name,
        color,
        sendEmail: email.sendEmail,
        emailSubject: email.emailSubject,
        emailBody: email.emailBody
      }
    });

    return NextResponse.json(status);
  } catch (error) {
    console.log('[STATUS_PATCH]', error);
    return new NextResponse("Internal error", { status: 500 })
  }
};

export async function DELETE(
  req: Request,
  { params }: { params: { storeId: string, statusId: string } }
) {
  try {
    const session = await getServerSession();
    const userId = session?.user?.email;

    if (!userId) {
      return new NextResponse("Non authentifié", { status: 401 });
    }

    if (!params.statusId) {
      return new NextResponse("Id de statut requise", { status: 400 });
    }

    if (params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca1" 
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca2"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca3"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca4"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca5"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca6"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca7"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca8"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dcca9"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dccb1"
      || params.statusId == "2dbe2055-b3b4-4172-9b5b-af93670dccb2") {
        return new NextResponse("Suppression interdite par le CMS", { status: 400 });
    }

    const storeByUserId = await prismadb.store.findFirst({
      where: {
        id: params.storeId,
      },
      include: {
        userToStore: {
          where: {
            userId: userId
          }
        }
      }
    });

    if (!storeByUserId) {
      return new NextResponse("Non autorisé", { status: 403 });
    }

    const status = await prismadb.status.deleteMany({
      where: {
        id: params.statusId,
      }
    });

    return NextResponse.json(status);
  } catch (error) {
    console.log('[STATUS_DELETE]', error);
    return new NextResponse("Internal error", { status: 500 })
  }
}; 
