<?php

namespace App\DataTables;

use App\Division;
use App\CoiUsers;
use Carbon\Carbon;
use Yajra\DataTables\Html\Button;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Services\DataTable;
use Yajra\DataTables\Html\Editor\Fields;
use Yajra\DataTables\Html\Editor\Editor;

class AppPersonnelReportView extends DataTable
{
    /**
     * Build DataTable class.
     *
     * @param mixed $query Results from query() method.
     * @return \Yajra\DataTables\DataTableAbstract
     */
    public function dataTable($query)
    {
        return datatables()
            ->eloquent($query)

            ->addColumn('a12_decision_making_process', function ($query) {
                return $query->a12_decision_making_process ?? 'No Input';
            })

            ->addColumn('a12_declarable_interest', function ($query) {
                return $query->a12_declarable_interest ?? 'No Input';
            })

            ->addColumn('a12_recuse', function ($query) {
                return $query->a12_recuse ?? 'No Input';
            })
            ->addColumn('a12_successful_in_securing_employment', function ($query) {
                return $query->a12_successful_in_securing_employment ?? 'No Input';
            })
            ->addColumn('a12_additional_information_12', function ($query) {
                return $query->a12_additional_information_12 ?? 'No Input';
            })

            ->addColumn('a13_business_relationship', function ($query) {
                return $query->a13_business_relationship ?? 'No Input';
            })
            ->addColumn('a13_enter_such_business_relationships', function ($query) {
                return $query->a13_enter_such_business_relationships ?? 'No Input';
            })
            ->addColumn('a13_additional_information_13', function ($query) {
                return $query->a13_additional_information_13 ?? 'No Input';
            })

            ->addColumn('a13_declarable_interest', function ($query) {
                return $query->a13_declarable_interest ?? 'No Input';
            })


            ->addColumn('a14_details_of_the_situation', function ($query) {
                return $query->a14_details_of_the_situation ?? 'No Input';
            })
            ->addColumn('a14_additional_information_14', function ($query) {
                return $query->a14_additional_information_14 ?? 'No Input';
            })

            ->addColumn('a14_declarable_interest', function ($query) {
                return $query->a14_declarable_interest ?? 'No Input';
            })


            ->addColumn('a15_employees_involved', function ($query) {
                return $query->a15_employees_involved ?? 'No Input';
            })
            ->addColumn('a15_relevant_details', function ($query) {
                return $query->a15_relevant_details ?? 'No Input';
            })
            ->addColumn('a15_additional_information_15', function ($query) {
                return $query->a15_additional_information_15 ?? 'No Input';
            })

            ->addColumn('a15_declarable_interest', function ($query) {
                return $query->a15_declarable_interest ?? 'No Input';
            })

            ->addColumn('a16_date_of_establishment_of_legacy_business', function ($query) {
                return $query->a16_date_of_establishment_of_legacy_business ?? 'No Input';
            })

            ->addColumn('a16_momo_operate', function ($query) {
                return $query->a16_momo_operate ?? 'No Input';
            })
            ->addColumn('a16_momo_family', function ($query) {
                return $query->a16_momo_family ?? 'No Input';
            })
            ->addColumn('a16_confidential_corporate_information', function ($query) {
                return $query->a16_confidential_corporate_information ?? 'No Input';
            })
            ->addColumn('a16_financial_benefit_family', function ($query) {
                return $query->a16_financial_benefit_family ?? 'No Input';
            })
            ->addColumn('a16_additional_information_16', function ($query) {
                return $query->a16_additional_information_16 ?? 'No Input';
            })

            ->addColumn('a16_declarable_interest', function ($query) {
                return $query->a16_declarable_interest ?? 'No Input';
            })

            ->addColumn('a17_dealer_or_dealer', function ($query) {
                return $query->a17_dealer_or_dealer ?? 'No Input';
            })
            ->addColumn('a17_appointed_director', function ($query) {
                return $query->a17_appointed_director ?? 'No Input';
            })

            ->addColumn('a17_declarable_interest_17', function ($query) {
                return $query->a17_declarable_interest_17 ?? 'No Input';
            })

            ->addColumn('a18_nature_of_trading', function ($query) {
                return $query->a18_nature_of_trading ?? 'No Input';
            })
            ->addColumn('a18_number_of_shares', function ($query) {
                return $query->a18_number_of_shares ?? 'No Input';
            })
            ->addColumn('a18_buyer_or_seller', function ($query) {
                return $query->a18_buyer_or_seller ?? 'No Input';
            })
            ->addColumn('a18_date_trading', function ($query) {
                return $query->a18_date_trading ?? 'No Input';
            })
            ->addColumn('a18_declarable_interest_18', function ($query) {
                return $query->a18_declarable_interest_18 ?? 'No Input';
            })

            ->addColumn('is_director', function ($query) {
                if ($query->is_director == 1) {
                    return 'Yes';
                } else {
                    return 'No';
                }
            })

            ->addColumn('a19_subs_shareholder', function ($query) {
                return $query->a19_subs_shareholder ?? 'No Input';
            })
            ->addColumn('a19_the_nature_of_relationship', function ($query) {
                return $query->a19_the_nature_of_relationship ?? 'No Input';
            })


            ->addColumn('a19_declarable_interest_19', function ($query) {
                return $query->a19_declarable_interest_19 ?? 'No Input';
            })


            ->addColumn('a20_details', function ($query) {
                return $query->a20_details ?? 'No Input';
            })
            ->addColumn('a20_declarable_interest_20', function ($query) {
                return $query->a20_declarable_interest_20 ?? 'No Input';
            })
            ->addColumn('a20_nature_of_interest', function ($query) {
                return $query->a20_nature_of_interest ?? 'No Input';
            })
            ->addColumn('a20_particulars', function ($query) {
                return $query->a20_particulars ?? 'No Input';
            })
            ////////////////////////
            ->addColumn('a11_nature_of_declarable_interest', function ($query) {
                return $query->a11_nature_of_declarable_interest ?? 'No Input';
            })
            ->addColumn('a11_influence_your_judgement', function ($query) {
                return $query->a11_influence_your_judgement ?? 'No Input';
            })
            ->addColumn('a11_additional_information_11', function ($query) {
                return $query->a11_additional_information_11 ?? 'No Input';
            })

            ->addColumn('a11_declarable_interest', function ($query) {
                return $query->a11_declarable_interest ?? 'No Input';
            })

            /////////////////////
            ->addColumn('a10_coi_conduct', function ($query) {
                return $query->a10_coi_conduct ?? 'No Input';
            })
            ->addColumn('a10_conflict_motivation', function ($query) {
                return $query->a10_conflict_motivation ?? 'No Input';
            })

            ->addColumn('a10_additional_information_10', function ($query) {
                return $query->a10_additional_information_10 ?? 'No Input';
            })

            ->addColumn('a10_declarable_interest', function ($query) {
                return $query->a10_declarable_interest ?? 'No Input';
            })

            ////////////////////
            ->addColumn('a9_whom_you_solicited', function ($query) {
                return $query->a9_whom_you_solicited ?? 'No Input';
            })
            ->addColumn('a9_competition_with_MTN', function ($query) {
                return $query->a9_competition_with_MTN ?? 'No Input';
            })
            ->addColumn('a9_additional_information_9', function ($query) {
                return $query->a9_additional_information_9 ?? 'No Input';
            })

            ->addColumn('a9_declarable_interest', function ($query) {
                return $query->a9_declarable_interest ?? 'No Input';
            })


            ///////////////////////
            ->addColumn('a8_commercial_activities', function ($query) {
                return $query->a8_commercial_activities ?? 'No Input';
            })
            ->addColumn('a8_sourced_or_promoted', function ($query) {
                return $query->a8_sourced_or_promoted ?? 'No Input';
            })

            ->addColumn('a8_third_parties_involved', function ($query) {
                return $query->a8_third_parties_involved ?? 'No Input';
            })
            ->addColumn('a8_commercial_activities_gain', function ($query) {
                return $query->a8_commercial_activities_gain ?? 'No Input';
            })

            ->addColumn('a8_additional_information_8', function ($query) {
                return $query->a8_additional_information_8 ?? 'No Input';
            })

            ->addColumn('a8_declarable_interest', function ($query) {
                return $query->a8_declarable_interest ?? 'No Input';
            })
            //////////////////////////////
            ->addColumn('a7_proper_authorisation', function ($query) {
                return $query->a7_proper_authorisation ?? 'No Input';
            })
            ->addColumn('a7_value_or_nature_of_personal_gain', function ($query) {
                return $query->a7_value_or_nature_of_personal_gain ?? 'No Input';
            })
            ->addColumn('a7_information_was_used', function ($query) {
                return $query->a7_information_was_used ?? 'No Input';
            })

            ->addColumn('a7_additional_information_7', function ($query) {
                return $query->a7_additional_information_7 ?? 'No Input';
            })
            ->addColumn('a7_declarable_interest', function ($query) {
                return $query->a7_declarable_interest ?? 'No Input';
            })
            ///////////////////////////////
            ->addColumn('a6_solicited_investment', function ($query) {
                return $query->a6_solicited_investment ?? 'No Input';
            })
            ->addColumn('a6_business_solicited_investment', function ($query) {
                return $query->a6_business_solicited_investment ?? 'No Input';
            })
            ->addColumn('a6_nature_of_soliciting_business', function ($query) {
                return $query->a6_nature_of_soliciting_business ?? 'No Input';
            })

            ->addColumn('a6_additional_information_6', function ($query) {
                return $query->a6_additional_information_6 ?? 'No Input';
            })
            ->addColumn('a6_declarable_interest', function ($query) {
                return $query->a6_declarable_interest ?? 'No Input';
            })


            /////////////////////////////////
            ->addColumn('a5_nature_of_the_influence', function ($query) {
                return $query->a5_nature_of_the_influence ?? 'No Input';
            })
            ->addColumn('a5_position_or_authority', function ($query) {
                return $query->a5_position_or_authority ?? 'No Input';
            })
            ->addColumn('a5_close_associate', function ($query) {
                return $query->a5_close_associate ?? 'No Input';
            })
            ->addColumn('a5_name_person_or_entity', function ($query) {
                return $query->a5_name_person_or_entity ?? 'No Input';
            })

            ->addColumn('a5_authority_to_influence', function ($query) {
                return $query->a5_authority_to_influence ?? 'No Input';
            })

            ->addColumn('a5_declarable_interest', function ($query) {
                return $query->a5_declarable_interest ?? 'No Input';
            })

            ///////////////////////////
            ->addColumn('a4_nature_of_contracts', function ($query) {
                return $query->a4_nature_of_contracts ?? 'No Input';
            })
            ->addColumn('a4_personal_gain_received', function ($query) {
                return $query->a4_personal_gain_received ?? 'No Input';
            })
            ->addColumn('a4_parties_involved', function ($query) {
                return $query->a4_parties_involved ?? 'No Input';
            })
            ->addColumn('a4_additional_information_4', function ($query) {
                return $query->a4_additional_information_4 ?? 'No Input';
            })

            ->addColumn('a4_declarable_interest', function ($query) {
                return $query->a4_declarable_interest ?? 'No Input';
            })

            //////////////////////////////
            ->addColumn('a3_personal_financial_interests', function ($query) {
                return $query->a3_personal_financial_interests ?? 'No Input';
            })
            ->addColumn('a3_value_personal_financial_interests', function ($query) {
                return $query->a3_value_personal_financial_interests ?? 'No Input';
            })
            ->addColumn('a3_professional_duties', function ($query) {
                return $query->a3_professional_duties ?? 'No Input';
            })
            ->addColumn('a3_mtn_business_activities', function ($query) {
                return $query->a3_mtn_business_activities ?? 'No Input';
            })
            ->addColumn('a3_personal_financial_interests_conflict', function ($query) {
                return $query->a3_personal_financial_interests_conflict ?? 'No Input';
            })
            ->addColumn('a3_additional_information_3', function ($query) {
                return $query->a3_additional_information_3 ?? 'No Input';
            })

            ->addColumn('a3_declarable_interest', function ($query) {
                return $query->a3_declarable_interest ?? 'No Input';
            })

            ////////////////////////////////

            ->addColumn('a2_nature_of_personal_business_interest', function ($query) {
                return $query->a2_nature_of_personal_business_interest ?? 'No Input';
            })
            ->addColumn('a2_corporate_or_business_name', function ($query) {
                return $query->a2_corporate_or_business_name ?? 'No Input';
            })
            ->addColumn('a2_decisions', function ($query) {
                return $query->a2_decisions ?? 'No Input';
            })
            ->addColumn('a2_independence_and_objectivity', function ($query) {
                return $query->a2_independence_and_objectivity ?? 'No Input';
            })
            ->addColumn('a2_additional_information_2', function ($query) {
                return $query->a2_additional_information_2 ?? 'No Input';
            })

            ->addColumn('a2_declarable_interest', function ($query) {
                return $query->a2_declarable_interest ?? 'No Input';
            })

            ///////////////////////////

            ->addColumn('a1_directorship', function ($query) {
                $html = '';

                $checkValue = (!empty($query->a1_directorship)
                && isset(json_decode($query->a1_directorship, true)[0]['name_of_business'])
                && isset(json_decode($query->a1_directorship, true)[0]['nature_of_business']));

                if ($checkValue) {
                    $directorships = json_decode($query->a1_directorship);

                    if (is_array($directorships)) {
                        foreach ($directorships as $directorship) {
                            $html .= '<div style="white-space: normal; min-width: 400px; line-height: initial; display: flex;">'; // Added display: flex; here
                            $html .= '<div style="flex: 1;"><strong>Name of Business:</strong> ' . '<p>' . $directorship->name_of_business . '</p></div>'; // Wrapped the "Name of Business" section in a separate div
                            $html .= '<div style="flex: 1;"><strong>Nature of Business:</strong> ' . '<p>' . $directorship->nature_of_business . '</p></div>'; // Wrapped the "Nature of Business" section in a separate div
                            $html .= '</div>';
                            $html .= '<br>';
                        }
                    }
                }

                return $checkValue ? $html: 'No Input';
            })


            ->addColumn('a1_dominant', function ($query) {
                $html = '';

                $checkValue = (!empty($query->a1_dominant)
                && isset(json_decode($query->a1_dominant, true)[0]['name_of_business'])
                && isset(json_decode($query->a1_dominant, true)[0]['nature_of_business']));

                if ($checkValue) {
                    $dominants = json_decode($query->a1_dominant);

                    if (is_array($dominants)) {
                        foreach ($dominants as $dominant) {
                            $html .= '<div style="white-space: normal; min-width: 400px; line-height: initial; display: flex;">';
                            $html .= '<div style="flex: 1;"><strong>Name of Business:</strong> ' . '<p>' . $dominant->name_of_business . '</p></div>';
                            $html .= '<div style="flex: 1;"><strong>Nature of Business:</strong> ' . '<p>' . $dominant->nature_of_business . '</p></div>';
                            $html .= '</div>';
                            $html .= '<br>';
                        }
                    }
                }

                return $checkValue ? $html: 'No Input';
            })

            ->addColumn('a1_trusteeship', function ($query) {
                $html = '';

                $checkValue = (!empty($query->a1_trusteeship)
                && isset(json_decode($query->a1_trusteeship, true)[0]['name_of_business'])
                && isset(json_decode($query->a1_trusteeship, true)[0]['nature_of_business']));

                if ($checkValue) {
                    $trusteeships = json_decode($query->a1_trusteeship);

                    if (is_array($trusteeships)) {
                        foreach ($trusteeships as $trusteeship) {
                            $html .= '<div style="white-space: normal; min-width: 400px; line-height: initial; display: flex;">';
                            $html .= '<div style="flex: 1;"><strong>Name of Business:</strong> ' . '<p>' . $trusteeship->name_of_business . '</p></div>';
                            $html .= '<div style="flex: 1;"><strong>Nature of Business:</strong> ' . '<p>' . $trusteeship->nature_of_business . '</p></div>';
                            $html .= '</div>';
                            $html .= '<br>';
                        }
                    }
                }

                return $checkValue ? $html: 'No Input';
            })


            ->addColumn('a1_participation', function ($query) {
                return $query->a1_participation ?? 'No Input';
            })

            ->addColumn('a1_other_business', function ($query) {
                return $query->a1_other_business ?? 'No Input';
            })

            ->addColumn('a1_any_other_business', function ($query) {
                return $query->a1_any_other_business ?? 'No Input';
            })

            ->addColumn('a1_any_other_interest', function ($query) {
                return $query->a1_any_other_interest ?? 'No Input';
            })

            ->addColumn('a1_name_of_entity', function ($query) {
                return $query->a1_name_of_entity ?? 'No Input';
            })
            ->addColumn('a1_additional_information', function ($query) {
                return $query->a1_additional_information ?? 'No Input';
            })
            ->addColumn('a1_declarable_interest', function ($query) {
                return $query->a1_declarable_interest ?? 'No Input';
            })

            ->addColumn('declared_at', function ($query) {
                return $query->declared_at ?? 'No Input';
            })
            ->addColumn('declared_date', function ($query) {
                return $query->declared_date ?? 'No Input';
            })
            ->rawColumns(['a1_directorship', 'a1_dominant', 'a1_trusteeship']);
    }

    /**
     * Get query source of dataTable.
     *
     * @param \App\App\DivisionDatatable $model
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function query()
    {
        $current_year = Carbon::now()->year;
        $query = CoiUsers::query()
            ->whereNull('deleted_at')
            ->whereRaw("YEAR(created_at) = $current_year")
            ->latest();
        return $this->applyScopes($query);
    }

    /**
     * Optional method if you want to use html builder.
     *
     * @return \Yajra\DataTables\Html\Builder
     */
    public function html()
    {
        return $this->builder()
            ->setTableId('divisiondatatables-table')
            ->columns($this->getColumns())
            ->minifiedAjax()
            ->dom('Bfrtip')
            ->orderBy(1)
            ->buttons(
                // Button::make('create'),
                Button::make('export'),
                Button::make('print')
                // Button::make('reset'),
                // Button::make('reload')
            );
    }

    /**
     * Get columns.
     *
     * @return array
     */
    protected function getColumns()
    {
        return [
            Column::make('name'),
            Column::make('email'),
            Column::make('phone'),
            Column::make('dept'),
            Column::make('division'),
            Column::make('level'),
            Column::make('is_director')->title('Is He/She a Director'),
            Column::make('employment_status'),
            Column::make('declared_at'),
            Column::make('declared_date'),
            Column::make('a1_declarable_interest'),
            Column::make('a1_directorship')->addClass('natureOfBusiness'),
            Column::make('a1_dominant')->addClass('natureOfBusiness'),
            Column::make('a1_trusteeship')->addClass('natureOfBusiness'),
            Column::make('a1_participation'),
            Column::make('a1_other_business'),
            Column::make('a1_any_other_business'),
            Column::make('a1_any_other_interest'),
            Column::make('a1_name_of_entity'),
            Column::make('a1_additional_information'),
            Column::make('a2_declarable_interest'),
            Column::make('a2_nature_of_personal_business_interest'),
            Column::make('a2_corporate_or_business_name'),
            Column::make('a2_decisions'),
            Column::make('a2_independence_and_objectivity'),
            Column::make('a2_additional_information_2'),
            Column::make('a3_declarable_interest'),
            Column::make('a3_personal_financial_interests'),
            Column::make('a3_value_personal_financial_interests'),
            Column::make('a3_professional_duties'),
            Column::make('a3_mtn_business_activities'),
            Column::make('a3_personal_financial_interests_conflict'),
            Column::make('a3_additional_information_3'),
            Column::make('a4_declarable_interest'),
            Column::make('a4_nature_of_contracts'),
            Column::make('a4_personal_gain_received'),
            Column::make('a4_parties_involved'),
            Column::make('a4_additional_information_4'),
            Column::make('a5_declarable_interest'),
            Column::make('a5_nature_of_the_influence'),
            Column::make('a5_position_or_authority'),
            Column::make('a5_close_associate'),
            Column::make('a5_name_person_or_entity'),
            Column::make('a5_authority_to_influence'),
            Column::make('a5_additional_information_5'),
            Column::make('a6_declarable_interest'),
            Column::make('a6_solicited_investment'),
            Column::make('a6_business_solicited_investment'),
            Column::make('a6_nature_of_soliciting_business'),
            Column::make('a6_additional_information_6'),
            Column::make('a7_declarable_interest'),
            Column::make('a7_proper_authorisation'),
            Column::make('a7_value_or_nature_of_personal_gain'),
            Column::make('a7_information_was_used'),
            Column::make('a7_additional_information_7'),
            Column::make('a8_declarable_interest'),
            Column::make('a8_commercial_activities'),
            Column::make('a8_sourced_or_promoted'),
            Column::make('a8_third_parties_involved'),
            Column::make('a8_commercial_activities_gain'),
            Column::make('a8_additional_information_8'),
            Column::make('a9_declarable_interest'),
            Column::make('a9_whom_you_solicited'),
            Column::make('a9_competition_with_MTN'),
            Column::make('a9_additional_information_9'),
            Column::make('a10_declarable_interest'),
            Column::make('a10_coi_conduct'),
            Column::make('a10_conflict_motivation'),
            Column::make('a10_additional_information_10'),
            Column::make('a11_declarable_interest'),
            Column::make('a11_nature_of_declarable_interest'),
            Column::make('a11_influence_your_judgement'),
            Column::make('a11_additional_information_11'),
            Column::make('a12_declarable_interest'),
            Column::make('a12_decision_making_process'),
            Column::make('a12_recuse'),
            Column::make('a12_successful_in_securing_employment'),
            Column::make('a12_additional_information_12'),
            Column::make('a13_declarable_interest'),
            Column::make('a13_business_relationship'),
            Column::make('a13_enter_such_business_relationships'),
            Column::make('a13_additional_information_13'),
            Column::make('a14_declarable_interest'),
            Column::make('a14_details_of_the_situation'),
            Column::make('a14_additional_information_14'),
            Column::make('a15_declarable_interest'),
            Column::make('a15_employees_involved'),
            Column::make('a15_relevant_details'),
            Column::make('a15_additional_information_15'),
            Column::make('a16_declarable_interest'),
            Column::make('a16_date_of_establishment_of_legacy_business'),
            Column::make('a16_momo_operate'),
            Column::make('a16_momo_family'),
            Column::make('a16_confidential_corporate_information'),
            Column::make('a16_financial_benefit_family'),
            Column::make('a16_additional_information_16'),
            Column::make('a17_declarable_interest_17'),
            Column::make('a17_dealer_or_dealer'),
            Column::make('a17_appointed_director'),
            Column::make('a18_declarable_interest_18')->title('17_a_declarable_interest'),
            Column::make('a18_nature_of_trading')->title('17_a_nature_of_trading'),
            Column::make('a18_number_of_shares')->title('17_a_number_of_shares'),
            Column::make('a18_buyer_or_seller')->title('17_a_buyer_or_seller'),
            Column::make('a18_date_trading')->title('17_a_date_trading'),
            Column::make('a19_declarable_interest_19')->title('17_b_declarable_interest'),
            Column::make('a19_subs_shareholder')->title('17_b_subs_shareholder'),
            Column::make('a19_the_nature_of_relationship')->title('17_b_the_nature_of_relationship'),
            Column::make('a20_nature_of_interest')->title('18_b_nature_of_interest'),
            Column::make('a20_particulars')->title('18_b_particulars'),
            Column::make('a20_declarable_interest_20')->title('a18_declarable_interest'),
            Column::make('a20_details')->title('a18_details'),

            // Column::make('name'),

        ];
    }

    /**
     * Get filename for export.
     *
     * @return string
     */
    protected function filename()
    {
        return 'DivisionDatatables_' . date('YmdHis');
    }
}
