'use server';

/**
 * 차량일지/월간사진기록 서버 액션
 */

import { isNextRedirectError } from '@/lib/utils/redirect-error';
import { getTodayString } from '@/lib/utils/date';
import type { VehicleLog, VehicleLogFormData, ActionResponse, ListResponse } from '../types';

// ===== Mock 데이터 (5130 레거시 기준) =====
const mockVehicleLogs: VehicleLog[] = [
  {
    id: '1',
    writeDate: '2025-12-01',
    vehicleInfo: '레이 - 224호9739',
    writer: '이세희',
    title: '25년11월 차량사진 대지',
    images: [
      'https://picsum.photos/400/300?random=1',
      'https://picsum.photos/400/300?random=2',
      'https://picsum.photos/400/300?random=3',
    ],
    createdAt: '2025-12-01',
  },
  {
    id: '2',
    writeDate: '2025-12-01',
    vehicleInfo: '봉고III1.2톤 - 81러8178',
    writer: '김진호',
    title: '25년11월 차량사진 대지',
    images: [],
    createdAt: '2025-12-01',
  },
  {
    id: '3',
    writeDate: '2025-12-01',
    vehicleInfo: '그랜드 스타렉스 - 81러8197',
    writer: '황규선',
    title: '25년11월 차량사진 대지',
    images: [],
    createdAt: '2025-12-01',
  },
  {
    id: '4',
    writeDate: '2025-12-01',
    vehicleInfo: '포터 - 83버5277',
    writer: '이재만',
    title: '25년11월 차량사진 대지',
    images: [],
    createdAt: '2025-12-01',
  },
  {
    id: '5',
    writeDate: '2025-11-05',
    vehicleInfo: '레이 - 224호9739',
    writer: '이세희',
    title: '25년 10월 차량사진 대지',
    images: [],
    createdAt: '2025-11-05',
  },
];

// ===== 차량일지 목록 조회 =====
export async function getVehicleLogs(params?: {
  page?: number;
  perPage?: number;
  search?: string;
}): Promise<ListResponse<VehicleLog>> {
  try {
    let filteredData = [...mockVehicleLogs];

    if (params?.search) {
      const search = params.search.toLowerCase();
      filteredData = filteredData.filter(
        (v) =>
          v.title.toLowerCase().includes(search) ||
          v.vehicleInfo.toLowerCase().includes(search) ||
          v.writer.toLowerCase().includes(search)
      );
    }

    return {
      success: true,
      data: filteredData,
      totalCount: filteredData.length,
      totalPages: 1,
    };
  } catch (error) {
    if (isNextRedirectError(error)) throw error;
    console.error('[VehicleLogActions] getVehicleLogs error:', error);
    return {
      success: false,
      data: [],
      totalCount: 0,
      totalPages: 0,
      error: '차량일지 목록 조회 중 오류가 발생했습니다.',
    };
  }
}

// ===== 차량일지 단건 조회 =====
export async function getVehicleLogById(id: string): Promise<ActionResponse<VehicleLog>> {
  try {
    const log = mockVehicleLogs.find((v) => v.id === id);
    if (!log) {
      return { success: false, error: '차량일지를 찾을 수 없습니다.' };
    }
    return { success: true, data: log };
  } catch (error) {
    if (isNextRedirectError(error)) throw error;
    console.error('[VehicleLogActions] getVehicleLogById error:', error);
    return {
      success: false,
      error: '차량일지 조회 중 오류가 발생했습니다.',
    };
  }
}

// ===== 차량일지 생성 =====
export async function createVehicleLog(
  formData: Partial<VehicleLogFormData>
): Promise<ActionResponse<VehicleLog>> {
  try {
    const newLog: VehicleLog = {
      id: String(Date.now()),
      writeDate: formData.writeDate || getTodayString(),
      vehicleInfo: formData.vehicleInfo || '',
      writer: formData.writer || '',
      title: formData.title || '',
      images: formData.images || [],
      createdAt: getTodayString(),
    };
    mockVehicleLogs.push(newLog);
    return { success: true, data: newLog };
  } catch (error) {
    if (isNextRedirectError(error)) throw error;
    console.error('[VehicleLogActions] createVehicleLog error:', error);
    return {
      success: false,
      error: '차량일지 등록 중 오류가 발생했습니다.',
    };
  }
}

// ===== 차량일지 수정 =====
export async function updateVehicleLog(
  id: string,
  formData: Partial<VehicleLogFormData>
): Promise<ActionResponse<VehicleLog>> {
  try {
    const index = mockVehicleLogs.findIndex((v) => v.id === id);
    if (index === -1) {
      return { success: false, error: '차량일지를 찾을 수 없습니다.' };
    }
    mockVehicleLogs[index] = {
      ...mockVehicleLogs[index],
      ...formData,
    };
    return { success: true, data: mockVehicleLogs[index] };
  } catch (error) {
    if (isNextRedirectError(error)) throw error;
    console.error('[VehicleLogActions] updateVehicleLog error:', error);
    return {
      success: false,
      error: '차량일지 수정 중 오류가 발생했습니다.',
    };
  }
}

// ===== 차량일지 삭제 =====
export async function deleteVehicleLog(id: string): Promise<ActionResponse> {
  try {
    const index = mockVehicleLogs.findIndex((v) => v.id === id);
    if (index === -1) {
      return { success: false, error: '차량일지를 찾을 수 없습니다.' };
    }
    mockVehicleLogs.splice(index, 1);
    return { success: true };
  } catch (error) {
    if (isNextRedirectError(error)) throw error;
    console.error('[VehicleLogActions] deleteVehicleLog error:', error);
    return {
      success: false,
      error: '차량일지 삭제 중 오류가 발생했습니다.',
    };
  }
}

// ===== 차량일지 일괄 삭제 =====
export async function bulkDeleteVehicleLogs(ids: string[]): Promise<ActionResponse> {
  try {
    ids.forEach((id) => {
      const index = mockVehicleLogs.findIndex((v) => v.id === id);
      if (index !== -1) {
        mockVehicleLogs.splice(index, 1);
      }
    });
    return { success: true };
  } catch (error) {
    if (isNextRedirectError(error)) throw error;
    console.error('[VehicleLogActions] bulkDeleteVehicleLogs error:', error);
    return {
      success: false,
      error: '차량일지 일괄 삭제 중 오류가 발생했습니다.',
    };
  }
}
