import { db } from '../../index';
import { psa } from '@schemas/schema';
import { eq, lt, gte, ne, and, like } from 'drizzle-orm';
import CATEGORY from '@src/data/parts_cats.json';

export async function getPSA(page = 1) {
  const limit = 20;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(eq(psa.fineline, "Lower Build Kits"))
    .offset(offset);
} 

export async function getLowerBuildKits(page = 1) {
  const limit = 20;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(eq(psa.fineline, "Lower Build Kits"))
    .offset(offset);
}

export async function getARCompleteLowers(page = 1) {
  const limit = 240;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(eq(psa.fineline, "AR Complete Lowers"))
    .offset(offset);
}

export async function getProductType(productType : any,  page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  await new Promise((resolve) => setTimeout(resolve,1000));
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(eq(psa.fineline, (typeof(productType) !== 'string' ? productType.name : productType)))
    .offset(offset);
}

export async function getGrips(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(eq(psa.fineline, "Grips"))
    .offset(offset);
}

export async function getARHandGuards(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(and(eq(psa.fineline, "Handguards & Rail Systems"), eq(psa.category, 'Ar Parts')))
    .offset(offset);
}

export async function getAKHandGuards(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(and(eq(psa.fineline, "Handguards & Rail Systems"), eq(psa.category, 'Ak Parts')))
    .offset(offset);
}

export async function getMuzzleDevices(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(eq(psa.fineline, "Muzzle Brakes"))
    .offset(offset);
}

export async function getStocks(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(eq(psa.fineline, "Stocks"))
    .offset(offset);
}

export async function getStocksParts(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(eq(psa.fineline, "Stocks"))
    .offset(offset);
}

export async function getUpperReciever(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(like(psa.fineline, "%Upper Receivers"))
    .offset(offset);
}

export async function getARTriggers(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(and(like(psa.fineline, "%Trigger%"), like(psa.category, "Ar Parts")))
    .offset(offset);
}

export async function getARParts(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(and(like(psa.fineline, "%Trigger%"), like(psa.category, "Ar Parts")))
    .offset(offset);
}

export async function getMags(page = 1) {
  const limit = 40;
  const offset = (page - 1) * limit;
  
  return await db.select()
    .from(psa)
    .limit(limit)
    .where(like(psa.superfineline, "%AR Magazines%"))
    .offset(offset);
}