'use server';
import { safeFetchApi } from '@/lib/fetch.api';
import {
  ApiResponseSchema,
  InventoryTable,
  productMutate,
  test,
  // editInventory,
  productApiResponseSchema,
  getProduct
} from '../schemas/inventory';

import { auth } from '@/lib/auth';

export const getInventoryAction = async (params: {
  page?: number;
  limit?: number;
  search?: string;
  sortBy?: string;
  sortOrder?: 'asc' | 'desc';
}) => {

  const searchParams = new URLSearchParams({
    page: (params.page || 1).toString(),
    limit: (params.limit || 10).toString(),
    ...(params.search && { search: params.search }),
    ...(params.sortBy && { sortBy: params.sortBy }),
    ...(params.sortOrder && { sortOrder: params.sortOrder }),
  });

  const [error, response] = await safeFetchApi(
    ApiResponseSchema,
    `/products/inventory?${searchParams}`,
    'GET'
  );

  if (error) {
    console.error(error);
    
    throw new Error(error.message);
  }
  // const transformedData = response?.data ? transformSurvey(response?.data) : undefined;

  return {
    data: response?.data || [],
    meta: response?.meta || {
      page: 1,
      limit: 10,
      totalCount: 0,
      totalPages: 1,
      hasNextPage: false,
      hasPreviousPage: false,
      nextPage: null,
      previousPage: null,
    },
  };
}

export const getAllProducts = async (params: {
  page?: number;
  limit?: number;
  search?: string;
  sortBy?: string;
  sortOrder?: 'asc' | 'desc';
}) => {

  const session = await auth()

  const searchParams = new URLSearchParams({
    page: (params.page || 1).toString(),
    limit: (params.limit || 10).toString(),
    ...(params.search && { search: params.search  }),
    ...(params.sortBy && { sortBy: params.sortBy }),
    ...(params.sortOrder && { sortOrder: params.sortOrder }),
  })

  const id = session?.user.id

  const [error, response] = await safeFetchApi(
    productApiResponseSchema,
    `/products/store?${searchParams}`,
    'GET'
  );

  if (error) {
    console.error('Errorrrrr:', error.details);
    throw new Error(error.message);
  }

  return {
    data: response?.data || [],
    meta: response?.meta || {
      page: 1,
      limit: 10,
      totalCount: 0,
      totalPages: 1,
      hasNextPage: false,
      hasPreviousPage: false,
      nextPage: null,
      previousPage: null,
    },
  };
};

export const getProductById = async (id: number) => {
  const [error, data] = await safeFetchApi(
    getProduct,
    `/products/id/${id}`,
    'GET',
  );

  if (error) {
    console.error('❌ Error en la API:', error);
    throw new Error(error.message);
  }

  return data;
};

export const createProductAction = async (payload: InventoryTable) => {
  const session = await auth()
  const userId = session?.user?.id
  const { id, ...payloadWithoutId } = payload;

  payloadWithoutId.userId = userId

  const [error, data] = await safeFetchApi(
    productMutate,
    '/products',
    'POST',
    payloadWithoutId,
  );

  if (error) {
    console.error(error);
    throw new Error('Error al crear el producto');
  }

  return payloadWithoutId;
};

export const updateUserAction2 = async (payload: InventoryTable) => {
  try {
    // const { id, urlImg, ...payloadWithoutId } = payload;

    // const formData = new FormData();
    // formData.append('file', urlImg);


    // console.log(formData);
    

    const [error, data] = await safeFetchApi(
      test,
      `/pictures/upload`,
      'POST',
      payload,
    );

    if (error) {
      console.error(error);
      throw new Error(error?.message || 'Error al actualizar el producto');
    }
    // console.log(data);
    return data;
    
  } catch (error) {
    console.error(error);
  }
}

export const updateUserAction = async (payload: InventoryTable) => {
  try {
    const { id, ...payloadWithoutId } = payload;

    const [error, data] = await safeFetchApi(
      productMutate,
      `/products/${id}`,
      'PATCH',
      payloadWithoutId,
    );

    if (error) {
      console.error(error);
      throw new Error(error?.message || 'Error al actualizar el producto');
    }
    return data;
  } catch (error) {
    console.error(error);
  }
}

export const deleteProductAction = async (id: Number) => {
  const [error] = await safeFetchApi(
    productMutate,
    `/products/${id}`,
    'DELETE'
  )
  console.log(error);
  if (error) throw new Error(error.message || 'Error al eliminar el usuario')

  return true;
}