import apiService from "@/app/lib/apiService";

export type Course = {
  id: string;
  courseName: string;
  instructorName: string;
  createdAt: string; // 생성일 (YYYY-MM-DD)
  createdBy: string; // 등록자
  hasLessons: boolean; // 강좌포함여부
  imageKey?: string; // 이미지 키
};

// 과목 리스트 조회 API
export async function getCourses(): Promise<Course[]> {
  try {
    // 교육과정과 강좌 리스트를 동시에 가져오기
    const [subjectsResponse, lecturesResponse] = await Promise.all([
      apiService.getSubjects(),
      apiService.getLectures().catch(() => ({ data: [] })), // 강좌 리스트 조회 실패 시 빈 배열 반환
    ]);

    const subjectsData = subjectsResponse.data;
    const lecturesData = lecturesResponse.data || [];

    // 디버깅: API 응답 구조 확인
    console.log('🔍 [getCourses] API 원본 응답:', subjectsData);
    console.log('🔍 [getCourses] 응답 타입:', Array.isArray(subjectsData) ? '배열' : typeof subjectsData);
    console.log('🔍 [getCourses] 강좌 리스트:', lecturesData);

    // API 응답이 배열이 아닌 경우 처리 (예: { items: [...] } 형태)
    let coursesArray: any[] = [];
    if (Array.isArray(subjectsData)) {
      coursesArray = subjectsData;
    } else if (subjectsData && typeof subjectsData === 'object') {
      // 더 많은 가능한 필드명 확인
      coursesArray = subjectsData.items || subjectsData.courses || subjectsData.data || subjectsData.list || subjectsData.subjects || subjectsData.subjectList || [];
    }

    // 강좌 리스트가 배열이 아닌 경우 처리
    let lecturesArray: any[] = [];
    if (Array.isArray(lecturesData)) {
      lecturesArray = lecturesData;
    } else if (lecturesData && typeof lecturesData === 'object') {
      lecturesArray = lecturesData.items || lecturesData.lectures || lecturesData.data || lecturesData.list || [];
    }

    console.log('🔍 [getCourses] 변환 전 배열:', coursesArray);
    console.log('🔍 [getCourses] 배열 길이:', coursesArray.length);
    console.log('🔍 [getCourses] 강좌 배열 길이:', lecturesArray.length);

    // 각 교육과정에 대해 강좌가 있는지 확인하기 위한 Set 생성
    const courseIdsWithLessons = new Set<string>();
    lecturesArray.forEach((lecture: any) => {
      const subjectId = String(lecture.subjectId || lecture.subject_id || '');
      if (subjectId) {
        courseIdsWithLessons.add(subjectId);
      }
    });

    console.log('🔍 [getCourses] 강좌가 있는 교육과정 ID:', Array.from(courseIdsWithLessons));

    // API 응답 데이터를 Course 형식으로 변환
    const transformedCourses: Course[] = coursesArray.map((item: any) => {
      const courseId = String(item.id || item.subjectId || item.subject_id || '');
      const hasLessons = courseIdsWithLessons.has(courseId);

      const transformed = {
        id: courseId,
        courseName: item.courseName || item.name || item.subjectName || item.subject_name || item.title || '',
        instructorName: item.instructorName || item.instructor || item.instructor_name || item.teacherName || '',
        createdAt: item.createdAt || item.createdDate || item.created_date || item.createdAt || '',
        createdBy: item.createdBy || item.creator || item.created_by || item.creatorName || '',
        hasLessons: hasLessons,
        imageKey: item.imageKey || item.image_key || item.fileKey || item.file_key || undefined,
      };
      console.log('🔍 [getCourses] 변환된 항목:', transformed);
      return transformed;
    });

    console.log('🔍 [getCourses] 최종 변환된 배열:', transformedCourses);
    console.log('🔍 [getCourses] 최종 배열 길이:', transformedCourses.length);

    return transformedCourses;
  } catch (error) {
    console.error('과목 리스트 조회 오류:', error);
    return [];
  }
}
