﻿<?php

namespace App\Exports;

use App\Models\AppraisalFinalScore;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;

class CompensationOutcomesExport implements FromCollection, WithHeadings, WithMapping
{
    /**
     * Fetch all outcomes
     */
    public function collection()
    {
        return AppraisalFinalScore::with(['appraisal_review.employee'])->get();
    }

    /**
     * Define column headings
     */
    public function headings(): array
    {
        return [
            'Employee',
            'Appraisal ID',
            'Final Score',
            'Action Type',
            'Action Details',
            'New Salary',
            'Bonus Multiplier',
            'New Equity',
            'Promotion Level',
            'Retention Grant',
            'Appraisal Date',
            'Status',
        ];
    }

    /**
     * Map each row for Excel
     */
    public function map($outcome): array
    {
        return [
            optional($outcome->appraisal_review->employee)->name ?? '-',
            $outcome->appraisal_review_id,
            $outcome->final_score ?? 0,
            ucfirst(str_replace('_', ' ', $outcome->action_type)),
            is_string($outcome->action_details) && \Illuminate\Support\Str::startsWith($outcome->action_details, '{')
            ? (json_decode($outcome->action_details)->notes ?? $outcome->action_details)
            : ($outcome->action_details ?? '-'),
            $outcome->new_salary ?? 0,
            $outcome->bonus_multiplier ?? 0,
            $outcome->new_equity ?? '-',
            $outcome->promotion_level ?? '-',
            $outcome->retention_grant ?? 0,
            $outcome->appraisal_review->appraisal_date ? \Carbon\Carbon::parse($outcome->appraisal_review->appraisal_date)->format('Y-m-d') : '-',
            ucfirst($outcome->appraisal_review->status ?? '-'),
        ];
    }