'use server';
import { safeFetchApi } from '@/lib/fetch.api';
import {
  CreateUser,
  surveysApiResponseSchema,
  UpdateUser,
  UsersMutate,
} from '../schemas/users';

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

export const getProfileAction = async () => {
  const session = await auth();
  const id = session?.user?.id;

  const [error, response] = await safeFetchApi(
    UsersMutate,
    `/users/${id}`,
    'GET',
  );
  if (error) throw new Error(error.message);
  return response;
};

export const updateProfileAction = async (payload: UpdateUser) => {
  const { id, ...payloadWithoutId } = payload;

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

  if (error) {
    if (error.message === 'Email already exists') {
      throw new Error('Ese correo ya está en uso');
    }
    // console.error('Error:', error);
    throw new Error('Error al crear el usuario');
  }
  return data;
};

export const getUsersAction = 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(
    surveysApiResponseSchema,
    `/users?${searchParams}`,
    'GET',
  );

  if (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 createUserAction = async (payload: CreateUser) => {
  const { id, confirmPassword, ...payloadWithoutId } = payload;

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

  if (error) {
    if (error.message === 'Username already exists') {
      throw new Error('Ese usuario ya existe');
    }
    if (error.message === 'Email already exists') {
      throw new Error('Ese correo ya está en uso');
    }
    // console.error('Error:', error);
    throw new Error('Error al crear el usuario');
  }

  return payloadWithoutId;
};

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

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

    // console.log(data);
    if (error) {
      console.error(error);

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

export const deleteUserAction = async (id: Number) => {
  const [error] = await safeFetchApi(UsersMutate, `/users/${id}`, 'DELETE');

  console.log(error);

  // if (error) throw new Error(error.message || 'Error al eliminar el usuario')

  return true;
};
