package com.takensoft.pohangTp.data.util;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.takensoft.pohangTp.common.file.vo.FileInfo;
import com.takensoft.pohangTp.data.vo.ColumnData;
import com.takensoft.pohangTp.data.vo.DataTable;
import com.takensoft.pohangTp.data.vo.Dataset;

/**
 * @author 김성원
 * @since 2024.01.09
 * 
 * 파일, DB, API, Dataset 간의 변환을 위한 클래스 
 */
public class DataTableConvert {

	
	/**
	 * @author 김성원
	 * @since 2024.01.12
	 * 
	 * 파일  -> 데이터셋 변환(엑셀, CSV, TEXT, JSON, XML)
	 */
	public static Dataset filetoDataset(FileInfo fileInfo) {
		
		// 데이터 확장자 
		String dataType = fileInfo.getFileFom();
		
		
		
		
		return null;
	}	
		
	
	/**
	 * @author 김성원
	 * @since 2024.01.12
	 * 
	 * List<Map<Object, String>> -> Dataset
	 */	
	public static DataTable listMaptoDataset(List<Map<String, Object>> mapData) {

		// 데이터 테이블 생성
		DataTable dataTable = new DataTable();
		
		// 헤더정보 리스트
		List<String> header = new ArrayList<>();
		
		// 컬럼 데이터 리스트
		List<ColumnData> columnDatas = new ArrayList<ColumnData>();
		
		int manxSize = 0;		
		
		// 제일큰 ROW의 헤더값 가져오기
		for(Map<String, Object> mapItm : mapData) {
			if(manxSize < mapItm.entrySet().size()) { 				
				manxSize = mapItm.entrySet().size();				
				header.clear();				
				for (Map.Entry<String, Object> elem : mapItm.entrySet()) {					
					header.add(elem.getKey());
				}							
			}	
		}		
		
		// row 데이터 생성
		for (Map<String, Object> temp : mapData) {
			List<Object> listTemp = new ArrayList();
			for(String head : header) {			
				if(temp.get(head) == null) {
					listTemp.add(null);
				}else {
					listTemp.add(temp.get(head));
				}			
			}
			dataTable.getRowData().add(listTemp);
		}		
		
		// 컬럼명 세팅
		for(String head : header) {			
			ColumnData columnData = new ColumnData();
			// 헤더명 (컬럼명)
			columnData.setColumnNm(head);
			columnData.setOrginlColumnNm(head);
			columnData.setDisplyColumnNm(head);
			columnDatas.add(columnData);
		}	
		
		// DataTable의 컬럼정보 세팅
		dataTable.setColumnDatas(columnDatas);

		return dataTable;
	}

}
