<?php

namespace App\Exports;

use App\Models\OrdenTrabajo;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;

class OrdenesExport implements FromQuery, WithHeadings, WithMapping, WithStyles
{
    public function __construct(public array $filtros = []) {}

    public function query()
    {
        $q = OrdenTrabajo::with(['equipo','area','estado','prioridad','responsable']);
        if (!empty($this->filtros['clase'])) $q->where('clase',$this->filtros['clase']);
        if (!empty($this->filtros['desde'])) $q->whereDate('fecha_programada','>=',$this->filtros['desde']);
        if (!empty($this->filtros['hasta'])) $q->whereDate('fecha_programada','<=',$this->filtros['hasta']);
        if (!empty($this->filtros['area_id'])) $q->where('area_id',$this->filtros['area_id']);
        return $q->orderByDesc('fecha_programada');
    }

    public function headings(): array
    {
        return ['Código','Clase','Equipo','Área','Programada','Inicio','Cierre','Estado','Prioridad','Responsable',
                'Costo MO','Costo Repuestos','Costo Otros','Costo Total','Observaciones'];
    }

    public function map($o): array
    {
        return [
            $o->codigo, ucfirst($o->clase), optional($o->equipo)->nombre, optional($o->area)->nombre,
            optional($o->fecha_programada)?->format('d/m/Y'),
            optional($o->fecha_inicio)?->format('d/m/Y H:i'),
            optional($o->fecha_cierre)?->format('d/m/Y H:i'),
            optional($o->estado)->nombre, optional($o->prioridad)->nombre,
            optional($o->responsable)->nombre_completo,
            $o->costo_mano_obra, $o->costo_repuestos, $o->costo_otros, $o->costo_total,
            $o->observaciones,
        ];
    }

    public function styles(Worksheet $sheet)
    {
        $sheet->getStyle('A1:O1')->getFont()->setBold(true);
        $sheet->getStyle('A1:O1')->getFill()->setFillType('solid')->getStartColor()->setRGB('1565C0');
        $sheet->getStyle('A1:O1')->getFont()->getColor()->setRGB('FFFFFF');
        return [];
    }
}
