<?php
require_once 'config.php';
require_once 'includes/Auth.php';
require_once 'includes/Database.php';
require_once 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;

Auth::requireAdmin();

// Paket kriterlerini veritabanından al
$db = new Database();
$packageCriteria = $db->fetchAll("SELECT name FROM criteria WHERE category = 'Paket Kriterleri' AND is_active = 1 ORDER BY display_order ASC, name ASC");
$packageTypes = array_column($packageCriteria, 'name');

// Excel dosyası oluştur
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Eğitim Kayıtları');

// Paket türleri için gizli bir sayfa oluştur
if (!empty($packageTypes)) {
    $validationSheet = $spreadsheet->createSheet();
    $validationSheet->setTitle('Paket_Listesi');
    
    // Paket türlerini gizli sayfaya yaz
    foreach ($packageTypes as $index => $package) {
        $validationSheet->setCellValue('A' . ($index + 1), $package);
    }
    
    // Gizli sayfayı gizle
    $validationSheet->setSheetState(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_HIDDEN);
}

// Ana sayfaya geri dön
$spreadsheet->setActiveSheetIndex(0);
$sheet = $spreadsheet->getActiveSheet();

// Başlıklar
$headers = [
    'A' => 'Firma ID *',
    'B' => 'Firma Adı *',
    'C' => 'Satış Kaynağı',
    'D' => 'Destek Temsilcisi Adı ve Soyadı',
    'E' => 'Eğitim Tamamlanma Tarihi',
    'F' => 'Satış Tipi *',
    'G' => 'Paket Türü *'
];

// Başlıkları ayarla
$sheet->fromArray(array_values($headers), null, 'A1');

// Başlık satırı stil ayarları
$headerStyle = [
    'font' => [
        'bold' => true,
        'color' => ['rgb' => 'FFFFFF'],
        'size' => 12
    ],
    'fill' => [
        'fillType' => Fill::FILL_SOLID,
        'startColor' => ['rgb' => '4472C4']
    ],
    'alignment' => [
        'horizontal' => Alignment::HORIZONTAL_CENTER,
        'vertical' => Alignment::VERTICAL_CENTER
    ],
    'borders' => [
        'allBorders' => [
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['rgb' => '000000']
        ]
    ]
];

$sheet->getStyle('A1:G1')->applyFromArray($headerStyle);

// Kolon genişliklerini ayarla
$sheet->getColumnDimension('A')->setWidth(15);
$sheet->getColumnDimension('B')->setWidth(30);
$sheet->getColumnDimension('C')->setWidth(20);
$sheet->getColumnDimension('D')->setWidth(25);
$sheet->getColumnDimension('E')->setWidth(20);
$sheet->getColumnDimension('F')->setWidth(20);
$sheet->getColumnDimension('G')->setWidth(20);

// Satır yüksekliği
$sheet->getRowDimension('1')->setRowHeight(25);

// Örnek veri ekle (açıklayıcı) - İlk paket türünü kullan
$firstPackage = !empty($packageTypes) ? $packageTypes[0] : 'Paket Seçiniz';
$secondPackage = isset($packageTypes[1]) ? $packageTypes[1] : $firstPackage;
$exampleData = [
    ['FRM001', 'Örnek Firma A.Ş.', 'Telefon', 'Ahmet Yılmaz', '2025-11-01', 'Yeni Satış', $firstPackage],
    ['FRM002', 'Demo Şirketi Ltd.', 'Web Sitesi', 'Ayşe Demir', '2025-11-05', 'Yenileme', $secondPackage],
    ['', '', '', '', '', '', '']
];

$sheet->fromArray($exampleData, null, 'A2');

// Örnek verileri gri yap
$exampleStyle = [
    'font' => ['color' => ['rgb' => '808080'], 'italic' => true],
    'fill' => [
        'fillType' => Fill::FILL_SOLID,
        'startColor' => ['rgb' => 'F2F2F2']
    ]
];
$sheet->getStyle('A2:G3')->applyFromArray($exampleStyle);

// E sütununa (Eğitim Tamamlanma Tarihi) tarih formatı ekle
$sheet->getStyle('E2:E100')->getNumberFormat()->setFormatCode('yyyy-mm-dd');

// G sütununa (Paket Türü) veri doğrulama ekle
if (!empty($packageTypes)) {
    $packageCount = count($packageTypes);
    
    // Gizli sayfadaki paket listesine referans veren formül
    $listFormula = 'Paket_Listesi!$A$1:$A$' . $packageCount;
    
    // Veri doğrulama için dropdown listesi oluştur
    $validation = $sheet->getCell('G2')->getDataValidation();
    $validation->setType(DataValidation::TYPE_LIST);
    $validation->setErrorStyle(DataValidation::STYLE_INFORMATION);
    $validation->setAllowBlank(false);
    $validation->setShowInputMessage(true);
    $validation->setShowErrorMessage(true);
    $validation->setShowDropDown(true);
    $validation->setErrorTitle('Geçersiz Paket Türü');
    $validation->setError('Lütfen listeden geçerli bir paket türü seçiniz.');
    $validation->setPromptTitle('Paket Türü Seçimi');
    $validation->setPrompt('Lütfen listeden bir paket türü seçiniz.');
    $validation->setFormula1($listFormula);
    
    // Veri doğrulamayı G sütununun geniş bir aralığına uygula (2-1000 arası satırlar)
    for ($row = 2; $row <= 1000; $row++) {
        $sheet->getCell("G$row")->setDataValidation(clone $validation);
    }
}

// Açıklama notu ekle
$sheet->setCellValue('A105', 'NOT: (*) işaretli alanlar zorunludur. Aynı firma farklı paketler alabilir. Örnek verileri silin ve gerçek verileri girin. Tarih: YYYY-MM-DD. Paket Türü sütununda dropdown menüden seçim yapınız.');
$sheet->mergeCells('A105:G105');
$sheet->getStyle('A105')->getFont()->setItalic(true)->setSize(10);
$sheet->getStyle('A105')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('FFFFCC');

// Dosyayı indir
$filename = 'egitim_tamamlama_sablonu_' . date('Y-m-d') . '.xlsx';

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');

$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
exit;
