<?php
// 에러 표시 설정 (개발 중에는 활성화, 배포 시 비활성화 권장)
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '../error_log.txt'); // 에러 로그 파일 저장 경로
error_reporting(E_ALL);

// JSON 응답 헤더 설정
header('Content-Type: application/json');

// JSON 응답을 생성하는 함수
function sendResponse($success, $data = null, $message = '') {
    $response = ['success' => $success];
    if ($data !== null) {
        $response['filename'] = $data;
    }
    if ($message !== '') {
        $response['message'] = $message;
    }
    echo json_encode($response);
    exit;
}

// 에러 핸들러 (모든 오류를 예외로 변환)
set_error_handler(function($errno, $errstr, $errfile, $errline) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});

try {
    // 요청 방식 확인
    if ($_SERVER['REQUEST_METHOD'] != 'POST') {
        sendResponse(false, null, '잘못된 요청 방법입니다.');
    }

    // JSON 데이터 읽기
    $data = json_decode(file_get_contents('php://input'), true);

    // JSON 디코딩 오류 및 데이터 유무 확인
    if (json_last_error() !== JSON_ERROR_NONE || empty($data)) {
        sendResponse(false, null, '유효하지 않은 데이터 형식이거나 데이터가 없습니다.');
    }

    // PHPExcel 라이브러리 포함 (경로 확인 필요)
    $phpExcelPath = '../PHPExcel_1.8.0/Classes/PHPExcel.php';
    if (!file_exists($phpExcelPath)) {
        sendResponse(false, null, 'PHPExcel 라이브러리가 존재하지 않습니다. 경로를 확인하세요.');
    }
    require $phpExcelPath;

    // 새로운 PHPExcel 객체 생성
    $objPHPExcel = new PHPExcel();
    $objPHPExcel->setActiveSheetIndex(0);
    $sheet = $objPHPExcel->getActiveSheet();

    // 엑셀 1행(A1:F1) 병합 및 스타일 설정
    $sheet->mergeCells('A1:F1');
    foreach ($data as $row) {
       $dateStr = $row['등록일자'];
	}		
	
    $sheet->setCellValue('A1', $dateStr . ' 경동화물');
    $sheet->getStyle('A1:F1')->applyFromArray([
        'font' => [
            'bold' => true,
            'size' => 28 // 글씨 크기 2배
        ],
        'alignment' => [
            'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER
        ]
    ]);

    // 엑셀 1행(G1:K1) 병합 및 세로 정렬 (텍스트 회전)
    $sheet->mergeCells('G1:K1');
    $sheet->setCellValue('G1', "(김포양촌누산1108 영업소   전  983 0406  팩 984 1964)");
    $sheet->getStyle('G1:K1')->applyFromArray([
        'alignment' => [
            'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
            'vertical' => PHPExcel_Style_Alignment::VERTICAL_BOTTOM,
            'textRotation' => 90 // 텍스트 90도 회전
        ],
        'font' => [
            'bold' => true,
            'size' => 10
        ]
    ]);

    // 엑셀 헤더 설정
    $headers = [
        '번호', '받을 분', '연락처', '도착지 주소', 
        '보내는 사람', '품명/현장명', '포장', '수량', '운임', 
        '운임구분', '물품가액'
    ];
    
    // 헤더 삽입 (2행부터 시작)
    $col = 'A';
    foreach ($headers as $header) {
        $sheet->setCellValue($col . '2', $header);
        $col++;
    }

    // 헤더 행 스타일 설정 (배경색 + 테두리 추가)
    $headerStyle = [
        'fill' => [
            'type' => PHPExcel_Style_Fill::FILL_SOLID,
            'startcolor' => ['rgb' => 'D3D3D3'] // 연한 회색
        ],
        'alignment' => [
            'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER
        ],
        'borders' => [
            'allborders' => [
                'style' => PHPExcel_Style_Border::BORDER_THIN,
                'color' => ['rgb' => '000000'] // 검정색 테두리
            ]
        ]
    ];
    $sheet->getStyle('A2:K2')->applyFromArray($headerStyle);
	
    // 각 열 너비 설정
    $columnWidths = [
        'A' => 7,   // 번호
        'B' => 15,   // 받을 분
        'C' => 15,   // 연락처
        'D' => 45,   // 도착지 주소
        'E' => 15,   // 보내는 사람
        'F' => 25,   // 품명/현장명
        'G' => 8,   // 포장
        'H' => 5,   // 수량
        'I' => 8,   // 운임
        'J' => 12,   // 운임구분
        'K' => 12   // 물품가액
    ];
    foreach ($columnWidths as $column => $width) {
        $sheet->getColumnDimension($column)->setWidth($width);
    }	

    // 데이터 삽입 (3행부터 시작)
    $rowNumber = 3;
    foreach ($data as $row) {
        $sheet->setCellValue("A{$rowNumber}", $row['번호'] ?? '');
        $sheet->setCellValue("B{$rowNumber}", $row['받을 분'] ?? '');
        $sheet->setCellValue("C{$rowNumber}", $row['연락처'] ?? '');
        $sheet->setCellValue("D{$rowNumber}", $row['도착지 주소'] ?? '');
        $sheet->setCellValue("E{$rowNumber}", $row['보내는 사람'] ?? '');
        $sheet->setCellValue("F{$rowNumber}", $row['품명/현장명'] ?? '');
        $sheet->setCellValue("G{$rowNumber}", $row['포장'] ?? '');
        $sheet->setCellValue("H{$rowNumber}", $row['수량'] ?? '');

        // 운임 및 물품가액은 오른쪽 정렬
        $sheet->setCellValue("I{$rowNumber}", $row['운임'] ?? '');
        $sheet->setCellValue("J{$rowNumber}", $row['운임구분'] ?? '');
        $sheet->setCellValue("K{$rowNumber}", $row['물품가액'] ?? '');

        $rowNumber++;
    }

    // 데이터 범위의 테두리 추가
    $dataRange = 'A2:K' . ($rowNumber - 1);
    $sheet->getStyle($dataRange)->applyFromArray([
        'borders' => [
            'allborders' => [
                'style' => PHPExcel_Style_Border::BORDER_THIN,
                'color' => ['rgb' => '000000'] // 검정색 테두리
            ]
        ]
    ]);

    // 운임 및 물품가액 열 오른쪽 정렬 적용
    $sheet->getStyle("I3:I$rowNumber")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
    $sheet->getStyle("K3:K$rowNumber")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

    // 엑셀 파일 저장 경로 설정
    $filename = 'delivery_fee_' . date('YmdHis') . '.xlsx';
    $filePath = '../excelsave/' . $filename;

    // PHPExcel Writer 설정
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

    // 엑셀 파일 저장
    $objWriter->save($filePath);

    if (file_exists($filePath)) {
        sendResponse(true, $filePath, '');
    } else {
        sendResponse(false, null, '엑셀 파일을 저장하지 못했습니다.');
    }

} catch (Exception $e) {
    error_log($e->getMessage());
    sendResponse(false, null, '엑셀 파일 생성 중 오류: ' . $e->getMessage());
}
?>
