export const handler = async (event: APIGatewayProxyEventV2): Promise => {
  const logger = new Logger();

  try {
    if (!event.body) {
      return {
        statusCode: 400,
        body: JSON.stringify({ message: 'No body provided' }),
      };
    }

    let body: NewCatRequest;
    try {
      body = NewCatRequestSchema.parse(JSON.parse(event.body ?? ''));
    } catch (error) {
      return {
        statusCode: 400,
        body: JSON.stringify({ message: 'Invalid body' }),
      };
    }

    const catOwner = await db
      .select()
      .from(catOwnersTable)
      .where(and(eq(catOwnersTable.active, true), eq(catOwnersTable.id, body.owner.id)))
      .limit(1)
      .then((rows) => rows[0]);

    if (!catOwner) {
      return {
        statusCode: 400,
        body: JSON.stringify({ message: 'Invalid owner' }),
      };
    }

    const cat = await db
      .insert(catsTable)
      .values({
        id: uuidv4(),
        name: body.cat.name,
        breed: body.cat.breed,
      })
      .returning({
        id: catsTable.id,
      })
      .then((rows) => rows[0]);

    return {
      statusCode: 200,
      body: JSON.stringify(cat),
    };

  } catch (err) {
    logger.error('Error creating cat', { err });
    return {
      statusCode: 500,
      body: JSON.stringify({ message: 'Internal server error' }),
    };
  }
};