<?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 LevelReportView 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_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('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('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('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('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('is_director', function($query) {
              if ($query->is_director ==1) {
              return 'Yes';
            }else {
              return 'No';
            }
            })
            ->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';
            })
            ->rawColumns(['a1_directorship', 'a1_dominant', 'a1_trusteeship']);


            // ->addColumn('action', function($query){
            //   // <a href="'.route('download.groupmanager.report',$query->id).'">
            //   // <button class="btn btn-primary btn-sm btn-block mr-3" style="margin-right:10px !important;"><span class="fa fa-download text-white"></span></button></a>
            //                   return '
            //                       <div style="display: flex;">
            //                       <a href="'.route('view.division.report',$query->id).'">
            //                       <button class="btn btn-primary btn-sm btn-block mr-3" style="margin-right:10px !important;"><span class="fa fa-eye text-white"></span></button></a>
            //
            //                       </div>
            //
            //      ';
            //
            //
            //    })
               ;
             }

    /**
     * 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()
      ->where('level',$this->id)
      ->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'),
          Column::make('a1_dominant'),
          Column::make('a1_trusteeship'),
          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_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');
    }
}
