'use server';

import { buildApiUrl } from '@/lib/api/query-params';
import { executeServerAction } from '@/lib/api/execute-server-action';
import { executePaginatedAction } from '@/lib/api/execute-paginated-action';

// -------------------------------------------------------------------
// 기초관리 (bending-items)
// -------------------------------------------------------------------

/** 기초관리 목록 조회 */
export async function getBendingItems(params?: {
  page?: number;
  perPage?: number;
  search?: string;
  item_sep?: string;
  item_bending?: string;
  material?: string;
  model_UA?: string;
}) {
  return executePaginatedAction({
    url: buildApiUrl('/api/v1/bending-items', {
      page: params?.page,
      per_page: params?.perPage,
      search: params?.search,
      item_sep: params?.item_sep !== 'all' ? params?.item_sep : undefined,
      item_bending: params?.item_bending !== 'all' ? params?.item_bending : undefined,
      material: params?.material !== 'all' ? params?.material : undefined,
      model_UA: params?.model_UA !== 'all' ? params?.model_UA : undefined,
    }),
    transform: (item: Record<string, unknown>) => item,
    errorMessage: '절곡 기초관리 목록 조회에 실패했습니다.',
  });
}

/** 기초관리 필터 옵션 조회 */
export async function getBendingItemFilters() {
  return executeServerAction({
    url: buildApiUrl('/api/v1/bending-items/filters'),
    errorMessage: '절곡 기초관리 필터 옵션 조회에 실패했습니다.',
  });
}

/** 기초관리 상세 조회 */
export async function getBendingItem(id: number | string) {
  return executeServerAction({
    url: buildApiUrl(`/api/v1/bending-items/${id}`),
    errorMessage: '절곡 기초관리 상세 조회에 실패했습니다.',
  });
}

/** 기초관리 등록 */
export async function createBendingItem(data: Record<string, unknown>) {
  return executeServerAction({
    url: buildApiUrl('/api/v1/bending-items'),
    method: 'POST',
    body: data,
    errorMessage: '절곡 기초관리 등록에 실패했습니다.',
  });
}

/** 기초관리 수정 */
export async function updateBendingItem(id: number | string, data: Record<string, unknown>) {
  return executeServerAction({
    url: buildApiUrl(`/api/v1/bending-items/${id}`),
    method: 'PUT',
    body: data,
    errorMessage: '절곡 기초관리 수정에 실패했습니다.',
  });
}

/** 기초관리 삭제 */
export async function deleteBendingItem(id: number | string) {
  return executeServerAction({
    url: buildApiUrl(`/api/v1/bending-items/${id}`),
    method: 'DELETE',
    errorMessage: '절곡 기초관리 삭제에 실패했습니다.',
  });
}

// -------------------------------------------------------------------
// 모델관리 (guiderail-models)
// -------------------------------------------------------------------

/** 모델 목록 조회 (item_category 필수!) */
export async function getGuiderailModels(params: {
  item_category: string;
  page?: number;
  perPage?: number;
  search?: string;
  item_sep?: string;
  model_UA?: string;
  check_type?: string;
  model_name?: string;
}) {
  return executePaginatedAction({
    url: buildApiUrl('/api/v1/guiderail-models', {
      item_category: params.item_category,
      page: params.page,
      per_page: params.perPage,
      search: params.search,
      item_sep: params.item_sep !== 'all' ? params.item_sep : undefined,
      model_UA: params.model_UA !== 'all' ? params.model_UA : undefined,
      check_type: params.check_type !== 'all' ? params.check_type : undefined,
      model_name: params.model_name !== 'all' ? params.model_name : undefined,
    }),
    transform: (item: Record<string, unknown>) => item,
    errorMessage: '절곡품 모델 목록 조회에 실패했습니다.',
  });
}

/** 모델 필터 옵션 조회 */
export async function getGuiderailModelFilters() {
  return executeServerAction({
    url: buildApiUrl('/api/v1/guiderail-models/filters'),
    errorMessage: '절곡품 모델 필터 옵션 조회에 실패했습니다.',
  });
}

/** 모델 상세 조회 (부품 조합 + 재질별 폭합 포함) */
export async function getGuiderailModel(id: number | string) {
  return executeServerAction({
    url: buildApiUrl(`/api/v1/guiderail-models/${id}`),
    errorMessage: '절곡품 모델 상세 조회에 실패했습니다.',
  });
}

/** 모델 등록 */
export async function createGuiderailModel(data: Record<string, unknown>) {
  return executeServerAction({
    url: buildApiUrl('/api/v1/guiderail-models'),
    method: 'POST',
    body: data,
    errorMessage: '절곡품 모델 등록에 실패했습니다.',
  });
}

/** 모델 수정 */
export async function updateGuiderailModel(id: number | string, data: Record<string, unknown>) {
  return executeServerAction({
    url: buildApiUrl(`/api/v1/guiderail-models/${id}`),
    method: 'PUT',
    body: data,
    errorMessage: '절곡품 모델 수정에 실패했습니다.',
  });
}

/** 모델 삭제 */
export async function deleteGuiderailModel(id: number | string) {
  return executeServerAction({
    url: buildApiUrl(`/api/v1/guiderail-models/${id}`),
    method: 'DELETE',
    errorMessage: '절곡품 모델 삭제에 실패했습니다.',
  });
}

// -------------------------------------------------------------------
// 이미지 (기존 API 재사용)
// -------------------------------------------------------------------

/** 이미지 업로드 */
export async function uploadBendingImage(itemId: number | string, file: FormData) {
  return executeServerAction({
    url: buildApiUrl(`/api/v1/items/${itemId}/files`),
    method: 'POST',
    body: file,
    errorMessage: '이미지 업로드에 실패했습니다.',
  });
}

/** 이미지 URL 생성 — types.ts에서 import하여 사용 (use server 파일에서 sync 함수 export 불가) */
