﻿<?php

namespace App\Exports;

use App\Models\Branch;
use App\Models\Department;
use App\Models\Designation;
use App\Models\Employee;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Illuminate\Support\Facades\Log;

class EmployeesExport implements FromCollection, WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */

    public function collection()
    {
        return Employee::with(['user.profile', 'user.jobInfo', 'user.bankInfo'])->get()->map(function ($employee) {
            $profile = $employee->user->profile ?? null;
            $jobInfo = $employee->user->jobInfo ?? null;
            $bankInfo = $employee->user->bankInfo ?? null;

            return [
                'Employee ID'        => $employee->user->id ?? '',

                // Profile
                'First Name'         => $profile->first_name ?? '',
                'Last Name'          => $profile->last_name ?? '',
                'Middle Name'        => $profile->middle_name ?? '',
                'Gender'             => $profile->gender ?? '',
                'DOB'                => $profile->dob ?? '',
                'Work Phone'         => $profile->work_phone ?? '',
                'Mobile Phone'       => $profile->mobile_phone ?? '',
                'Work Email'         => $profile->work_email ?? '',
                'Personal Email'     => $profile->personal_email ?? '',
                'Address'            => $profile->address ?? '',
                'Nationality'        => $profile->nationality ?? '',
                'Marital Status'     => $profile->marital_status ?? '',

                // Job Info
                'Job Title'          => $jobInfo->title ?? '',
                'Pension %'          => $jobInfo->pension_percentage ?? '',
                'Hire Date'          => $jobInfo->hire_date ?? '',
                'Employment Type ID' => $jobInfo->employment_type_id ?? '',
                'Pay Frequency'      => $jobInfo->pay_frequency ?? '',
                'Pay Rate'           => $jobInfo->pay_rate ?? '',

                // Bank Info
                'Bank Name'          => $bankInfo->bank_name ?? '',
                'Account Name'       => $bankInfo->account_name ?? '',
                'Account Number'     => $bankInfo->account_number ?? '',
                'Bank Code'          => $bankInfo->bank_code ?? '',
                'PFA Name'           => $bankInfo->pfa_name ?? '',
                'Tax ID'             => $bankInfo->tax_id ?? '',
                'NHF Number'         => $bankInfo->nhf_number ?? '',
            ];
        });
    }

    public function headings(): array
    {
        return [
            'Employee ID',

            // Profile
            'First Name',
            'Last Name',
            'Middle Name',
            'Gender',
            'DOB',
            'Work Phone',
            'Mobile Phone',
            'Work Email',
            'Personal Email',
            'Address',
            'Nationality',
            'Marital Status',

            // Job Info
            'Job Title',
            'Pension %',
            'Hire Date',
            'Employment Type ID',
            'Pay Frequency',
            'Pay Rate',

            // Bank Info
            'Bank Name',
            'Account Name',
            'Account Number',
            'Bank Code',
            'PFA Name',
            'Tax ID',
            'NHF Number',
        ];
    }

    // public function collection()
    // {
    //     $data = Employee::where('created_by', \Auth::user()->creatorId())->get();
    //     foreach($data as $k => $employees)
    //     {
    //         unset($employees->id,$employees->user_id,$employees->documents,$employees->tax_payer_id,$employees->is_active,$employees->created_at,$employees->updated_at);

    //         $data[$k]["branch_id"]=!empty($employees->branch_id) ? $employees->branch->name : '-';
    //         $data[$k]["department_id"]=!empty($employees->department_id) ? $employees->department->name : '-';
    //         $data[$k]["designation_id"]= !empty($employees->designation_id) ? $employees->designation->name : '-';
    //         $data[$k]["salary_type"]=!empty($employees->salary_type) ? $employees->salaryType->name :'-';
    //         $data[$k]["salary"]=Employee::employee_salary($employees->salary);
    //         $data[$k]["created_by"]=Employee::login_user($employees->created_by);

    //     }

    //     return $data;
    // }

    // public function headings(): array
    // {
    //     return [
    //         "Name",
    //         "Date of Birth",
    //         "Gender",
    //         "Phone Number",
    //         "Address",
    //         "Email ID",
    //         "Password",
    //         "Employee ID",
    //         "Branch",
    //         "Department",
    //         "Designation",
    //         "Date of Join",
    //         "Account Holder Name",
    //         "Account Number",
    //         "Bank Name",
    //         "Bank Identifier Code",
    //         "Branch Location",
    //         "Salary Type",
    //         "Salary",
    //         "Created By"
    //     ];
    // }