<?php

namespace App\Exports;

use App\Models\form;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;


class XuatKetQuaTHPT implements FromCollection,WithHeadings
{
    protected $selectDot;

    public function __construct($selectDot)
    {
        $this->selectDot = $selectDot;
    }

    public function collection()
    {
        $data = DB::table('form')
            ->join('nganhhoc', 'form.MaNganhHoc', '=', 'nganhhoc.MaNganhHoc')
            ->join('truong','form.MaTruong','=','truong.MaTruong') 
            ->leftJoin('form_diem', 'form.MaForm', '=', 'form_diem.MaForm')
            ->select(
                'form.HoTen',
                DB::raw("CASE WHEN form.GioiTinh = 1 THEN 'Nam' ELSE 'Nữ' END AS GioiTinh"),
                'form.NgaySinh',
                'form.CCCD',
                'form.Email',
                'form.SoDienThoai',
                'form.DiaChi',
                'truong.TenTruong',
                'nganhhoc.TenNganhHoc',
                'form.NgayDangKy',
                DB::raw("SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT form_diem.MaKhoi ORDER BY form_diem.MaKhoi SEPARATOR ','), ',', 1) AS KhoiXetTuyen"),
                DB::raw("ROUND(SUM(form_diem.Diem), 1) AS TongDiem"),
                DB::raw("CASE WHEN form.KetQua = 1 THEN 'Đạt' ELSE 'Chưa Đạt' END AS KetQua")
            )
            ->where('form.MaDotXetTuyen', $this->selectDot)
            ->where('form.Loai','THPTQG')
            ->groupBy('form.MaForm')
            ->orderBy('form.MaForm', 'asc')
            ->get();

            $index = 1;

            return $data->map(function ($item) use (&$index) {
                $itemArray = (array) $item;
                $itemArray['STT'] = $index++;
                $itemArray = ['STT' => $itemArray['STT']] + $itemArray;
                return $itemArray;
        });
    }
    

    
    public function headings(): array
    {
        return [
            'Mã Form',
            'Họ và Tên',
            'Giới Tính',
            'Ngày Sinh',
            'CCCD',
            'Email',
            'Số Điện Thoại',
            'Địa Chỉ',
            'Tên trường',
            'Ngành đăng ký',
            'Ngày đăng ký',
            'Khối xét tuyển',
            'Điểm TB',
            'Kết Quả',
        ];
    }
}