<?php

namespace Koneko\VuexyContacts\Livewire\Contacts;

use Koneko\VuexyAdmin\Models\User;
use Koneko\VuexyAdmin\Livewire\Table\AbstractIndexComponent;

class ContactIndex extends AbstractIndexComponent
{
    /**
     * Almacena rutas útiles para la funcionalidad de edición o eliminación.
     */
    public $routes = [];

    /**
     * Método que define la clase o instancia del modelo a usar en este Index.
     */
    protected function model(): string
    {
        return User::class;
    }

    /**
     * Retorna las columnas (header) de la tabla.
     */
    protected function columns(): array
    {
        return [
            'action'          => 'Acciones',
            'code'            => 'Código personal',
            'full_name'       => 'Nombre Completo',
            'email'           => 'Correo Electrónico',
            'parent_name'     => 'Responsable',
            'parent_email'    => 'Correo Responsable',
            'company'         => 'Empresa',
            'birth_date'      => 'Fecha de Nacimiento',
            'hire_date'       => 'Fecha de Contratación',
            'curp'            => 'CURP',
            'nss'             => 'NSS',
            'job_title'       => 'Puesto',
            'rfc'             => 'RFC',
            'nombre_fiscal'   => 'Nombre Fiscal',
            'tipo_persona'    => 'Tipo de Persona',
            'c_regimen_fiscal'=> 'Régimen Fiscal',
            'domicilio_fiscal'=> 'Domicilio Fiscal',
            'c_uso_cfdi'      => 'Clave Uso CFDI',
            'uso_cfdi'        => 'Uso CFDI',
            'profile_photo_path' => 'Foto de Perfil',
            'is_partner'      => 'Socio',
            'is_employee'     => 'Empleado',
            'is_prospect'     => 'Prospecto',
            'is_customer'     => 'Cliente',
            'is_provider'     => 'Proveedor',
            'is_user'         => 'Usuario',
            'status'          => 'Estatus',
            'creator'         => 'Creado Por',
            'creator_email'   => 'Correo Creador',
            'created_at'      => 'Fecha de Creación',
            'updated_at'      => 'Última Modificación',
        ];
    }

    /**
     * Retorna el formato (formatter) para cada columna.
     */
    protected function format(): array
    {
        return [
            'action' => [
                'formatter'     => 'contactActionFormatter',
                'onlyFormatter' => true,
            ],
            'code' => [
                'formatter' => [
                    'name'   => 'dynamicBadgeFormatter',
                    'params' => ['color' => 'secondary'],
                ],
                'align'      => 'center',
                'switchable' => false,
            ],
            'full_name' => [
                'formatter' => 'contactProfileFormatter',
            ],
            'email' => [
                'formatter' => 'emailFormatter',
                'visible'   => false,
            ],
            'parent_name' => [
                'formatter' => 'contactParentFormatter',
                'visible'   => false,
            ],
            'agent_name' => [
                'formatter' => 'agentFormatter',
                'visible'   => false,
            ],
            'company' => [
                'formatter' => 'textNowrapFormatter',
            ],
            'curp' => [
                'visible'   => false,
            ],
            'nss' => [
                'visible'   => false,
            ],
            'job_title' => [
                'formatter' => 'textNowrapFormatter',
                'visible'   => false,
            ],
            'rfc' => [
                'visible'   => false,
            ],
            'nombre_fiscal' => [
                'formatter' => 'textNowrapFormatter',
                'visible'   => false,
            ],
            'domicilio_fiscal' => [
                'visible'   => false,
            ],
            'c_uso_cfdi' => [
                'formatter' => 'usoCfdiFormatter',
                'visible'   => false,
            ],
            'tipo_persona' => [
                'formatter' => 'dynamicBadgeFormatter',
                'align'     => 'center',
                'visible'   => false,
            ],
            'c_regimen_fiscal' => [
                'formatter' => 'regimenFiscalFormatter',
                'visible'   => false,
            ],
            'birth_date' => [
                'align'      => 'center',
                'visible'   => false,
            ],
            'hire_date' => [
                'align'      => 'center',
                'visible'   => false,
            ],
            'estado' => [
                'formatter' => 'textNowrapFormatter',
            ],
            'municipio' => [
                'formatter' => 'textNowrapFormatter',
            ],
            'localidad' => [
                'formatter' => 'textNowrapFormatter',
                'visible'   => false,
            ],
            'is_partner' => [
                'formatter' => [
                    'name'   => 'dynamicBooleanFormatter',
                    'params' => ['tag' => 'checkSI'],
                ],
                'align'     => 'center',
            ],
            'is_employee' => [
                'formatter' => [
                    'name'   => 'dynamicBooleanFormatter',
                    'params' => ['tag' => 'checkSI'],
                ],
                'align'     => 'center',
            ],
            'is_prospect' => [
                'formatter' => [
                    'name'   => 'dynamicBooleanFormatter',
                    'params' => ['tag' => 'checkSI'],
                ],
                'align'     => 'center',
            ],
            'is_customer' => [
                'formatter' => [
                    'name'   => 'dynamicBooleanFormatter',
                    'params' => ['tag' => 'checkSI'],
                ],
                'align'     => 'center',
            ],
            'is_provider' => [
                'formatter' => [
                    'name'   => 'dynamicBooleanFormatter',
                    'params' => ['tag' => 'checkSI'],
                ],
                'align'     => 'center',
            ],
            'is_user' => [
                'formatter' => [
                    'name'   => 'dynamicBooleanFormatter',
                    'params' => ['tag' => 'checkSI'],
                ],
                'align'     => 'center',
            ],
            'status' => [
                'formatter' => 'statusIntBadgeBgFormatter',
                'align' => 'center',
            ],
            'creator' => [
                'formatter' => 'creatorFormatter',
                'visible'   => false,
            ],
            'created_at' => [
                'formatter' => 'textNowrapFormatter',
                'align'     => 'center',
                'visible'   => false,
            ],
            'updated_at' => [
                'formatter' => 'textNowrapFormatter',
                'align'     => 'center',
                'visible'   => false,
            ],
        ];
    }

    /**
     * Montamos el componente y llamamos al parent::mount() para configurar la tabla.
     */
    public function mount(): void
    {
        parent::mount();

        // Definimos las rutas específicas de este componente
        $this->routes = [
            'admin.user.show' => route('admin.core.users.show', ['user' => ':id']),
            'admin.contact.show'  => route('admin.contacts.contacts.show',  ['contact' => ':id']),
            'admin.contact.edit'   => route('admin.contacts.contacts.edit',   ['contact' => ':id']),
            'admin.contact.delete' => route('admin.contacts.contacts.delete', ['contact' => ':id']),
        ];
    }

    /**
     * Retorna la vista a renderizar por este componente.
     */
    protected function viewPath(): string
    {
        return 'vuexy-contacts::livewire.contacts.index';
    }
}