<?php

// use Phalcon\Paginator\Factory;
use Phalcon\Paginator\Adapter\Model;

class StranasNewTargetController extends BaseController
{
    public function index()
    {
        $this->checkIsAuthenticated();

        $getParams = $this->request->get();
        $getParams['limit'] = $this->getDefaultLimit($getParams);
        $getParams['offset'] = array_key_exists('offset', $getParams) ? $getParams['offset'] : 0;
        $getParams['keyword'] = array_key_exists('keyword', $getParams) ? $getParams['keyword'] : '';
        // $getParams['order'] = array_key_exists('order', $getParams) ? strtolower($getParams['order']) : 'id';
        $getParams['order_by'] = array_key_exists('order_by', $getParams) ? strtolower($getParams['order_by']) : 'id';
        $getParams['order_direction'] = array_key_exists('order_direction', $getParams) ? strtolower($getParams['order_direction']) : 'asc';

        $allowed_order = [
            'id',
            'id_periode',
            'id_level1',
            'id_level2',
            'id_level3',
            'id_level4'
        ];
        $allowed_order_direction = ['asc', 'desc'];

        $params = $this->validate(
            $getParams,
            [
                'limit' => ['validators' => ['digit']],
                'offset' => ['validators' => ['digit']],
                'keyword' => ['validators' => []],
                'order_by' => ['validators' =>  [[
                    'name' => 'inclusion_in',
                    'params' => $allowed_order
                ]]],
                'order_direction' => ['validators' =>  [[
                    'name' => 'inclusion_in',
                    'params' => $allowed_order_direction
                ]]]
            ]
        );

        
        $where = ' 1=1 ';
        $where .= (isset($_GET['id_level1']) && $_GET['id_level1'] != '') ? ' and id_level1 = '.$_GET['id_level1'] : '';
        $where .= (isset($_GET['id_level2']) && $_GET['id_level2'] != '') ? ' and id_level2 = '.$_GET['id_level2'] : '';
        $where .= (isset($_GET['id_level3']) && $_GET['id_level3'] != '') ? ' and id_level3 = '.$_GET['id_level3'] : '';
        $where .= (isset($_GET['id_level4']) && $_GET['id_level4'] != '') ? ' and id_level4 = '.$_GET['id_level4'] : '';
        // $where .= if(isset($_GET['is_active'])) && $_GET['is_active'] != '') ? ' and deleted_at = '.$_GET['is_active'] : '';
        if(isset($_GET['is_active'])) {
            if($_GET['is_active'] == 1) {
                $where .= ' and deleted_at is null ';
            } else if($_GET['is_active'] == 0) {
                $where .= ' and deleted_at is not null ';
            }
        }
        $where .= (isset($_GET['id']) && $_GET['id'] != '') ? ' and id = '.$_GET['id'] : '';
        $where .= (isset($params['keyword']) && $params['keyword'] != '') ? " and (nama ilike '%". $params['keyword'] . "%' or instansi ilike '%". $params['keyword'] . "%')" : '';

        // $where .= (isset($_GET['id_periode']) && $_GET['id_periode'] != '') ? ' and id_periode = '.$_GET['id_periode'] : '';
        $periode = $this->rawQuery("select * from jaga.str_periode where is_active=true");
        // $where .= (isset($_GET['id_periode']) && $_GET['id_periode'] != '') ? ' and id_periode = '.$_GET['id_periode'] : ' and id_periode = '.$periode[0]['id'];
        $where .= (isset($_GET['id_periode']) && $_GET['id_periode'] != '') ? ' and id_periode = '.$_GET['id_periode'] : '';

        $rows = StranasNewTargetInstansi::find([
            'conditions' => $where,
            // 'conditions' => 'deleted_at is null and nama ilike :keyword: and 1=1 '.$where,
            // 'bind' => [
            //     'keyword' => '%' . $params['keyword'] . '%'
            // ],
            'limit' => $params['limit'],
            'offset' => $params['offset'],
            'order' => "{$params['order_by']} {$params['order_direction']}"
        ]);

        $total = $this->rawQuery('select count(1) as total_record from jaga.stranas_target_instansi where '.$where);
        return new PaginatedResponse($rows, $total[0]['total_record'], $params['limit'], $params['offset']);
    }


    public function detail($id)
    {
        $this->checkIsAuthenticated();

        $target = StranasNewTarget::findFirst($id);

        if (empty($target)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target tidak ditemukan');
        }

        $result = $target->toDetail();

        return new CollectionPaginatedResponse([$result]);
    }

    public function create()
    {
        $this->checkScopes(['stranas.admin']);

        $rawBody = $this->request->getJsonRawBody(true);
        $params = $this->validate(
            $rawBody,
            [
                'nama' => ['validators' => ['required']],
                'id_periode' => ['validators' => ['required','digit']],
                'id_hierarchy' => ['validators' => ['required','digit']],
                'info_nilai' => ['validators' => []],
                'info_lampiran' => ['validators' => []],
                'instansi' => ['validators' => []],
                'is_special' => ['validators' => ['digit']],
                'start_triwulan' => ['validators' => ['digit']],
                'ord' => ['validators' => ['digit']],
            ]
        );

        $periode = $this->rawQuery("select * from jaga.str_periode where id=".$params['id_periode']); 
        if (count($periode)<1) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Periode tidak ditemukan');
        }
        // if (!$periode[0]['is_active']) {
        //     throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Periode tidak aktif');
        // }
        // check hierarchy
        $hierarchy = $this->rawQuery("select * from jaga.hierachy_by_level where id_level".$periode[0]['level_count']."=".$params['id_hierarchy']);
        if (count($hierarchy)<1) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Hierarchy bukan level terkecil (level '.$periode[0]['level_count'].') atau hierarchy di atasnya telah terhapus.');
        }
        
        $target = new StranasNewTarget();
        $target->nama = $params['nama'];
        $target->info_nilai = $params['info_nilai'];
        $target->info_lampiran = $params['info_lampiran'];
        $target->id_periode = $params['id_periode'];
        $target->id_level1 = $hierarchy[0]['id_level1'];
        $target->id_level2 = $hierarchy[0]['id_level2'];
        $target->id_level3 = $hierarchy[0]['id_level3'];
        $target->id_level4 = $hierarchy[0]['id_level4'];
        $target->is_special = $params['is_special'];
        $target->start_triwulan = $params['start_triwulan'];
        $target->ord = $params['ord'];
        $now = date('Y-m-d H:i:s');
        $target->created_at = $now;
        $target->created_by = $this->shared->user->um_id;
        $target->is_forced_complete = false;
        $status = $target->save();

        if (!$status) {
            $errors = $target->getMessages();
            $error_messages = [];

            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }

            throw new ValidationException($error_messages);
        } else {
            // check id_insansi
            if(count($params['instansi'])>0) {
                $instansi = $this->rawQuery("select * from jaga.instansi where id in (".implode(",", $params['instansi']).")");

                if (count($instansi)>0) {
                    foreach ($instansi as $i) { 
                        $master = new StranasNewMasterTarget();
                        $master->id_periode = $target->id_periode;
                        $master->id_target = $target->id;
                        $master->id_triwulan = 1;
                        // kolom ini seharusnya ambil dari target sahaja
                        $master->id_level1 = $target->id_level1;
                        $master->id_level2 = $target->id_level2;
                        $master->id_level3 = $target->id_level3;
                        $master->id_level4 = $target->id_level4;
                        $master->is_special = $target->is_special;
                        $master->id_instansi = $i['id'];
                        $master->save();

                        // if special > 1
                        if($params['is_special'] > 1) {
                            $spc = new StranasNewTargetSpecialLog();
                            $spc->id_master = $master->id;
                            $status = $spc->save();
                        }
                    }                    
                }

                if($params['is_special'] > 1) {
                    // chek all where spcial log is not exist
                    $spc = $this->rawQuery('select a.id, b.id as id_master from jaga.str_target_master a left join jaga.str_log_special b on b.id_master  = a.id where b.id is null and a.id_target = '.$target->id);
                    if (count($spc)>0) {
                        foreach ($spc as $i) { 
                            $master = new StranasNewTargetSpecialLog();
                            $master->id_master = $i['id'];
                            $master->save();
                        }                
                    }
                }

            }

            return new CollectionPaginatedResponse([$target]);
        }
    }

    public function update($id)
    {
        $this->checkScopes(['stranas.admin']);
        $rawBody = $this->request->getJsonRawBody(true);
        // print_r($rawBody); die;
        
        $params = $this->validate(
            $rawBody,
            [
                'nama' => ['validators' => ['required']],
                'id_periode' => ['validators' => ['required','digit']],
                'id_hierarchy' => ['validators' => ['required','digit']],
                'info_nilai' => ['validators' => []],
                'info_lampiran' => ['validators' => []],
                'instansi' => ['validators' => []],
                'is_special' => ['validators' => ['digit']],
                'start_triwulan' => ['validators' => ['digit']],
                'ord' => ['validators' => ['digit']],
                'is_forced_complete' => ['validators' => []]
            ]
        );

        $target = StranasNewTarget::findFirst($id);
        if (empty($target)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target tidak ditemukan');
        }
        if (!empty($target->deleted_at)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target sudah terhapus');
        }

        $periode = $this->rawQuery("select * from jaga.str_periode where id=".$params['id_periode']); 
        if (count($periode)<1) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Periode tidak ditemukan');
        }
        // if (!$periode[0]['is_active']) {
        //     throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Periode tidak aktif');
        // }
        // check hierarchy
        $hierarchy = $this->rawQuery("select * from jaga.hierachy_by_level where id_level".$periode[0]['level_count']."=".$params['id_hierarchy']);
        if (count($hierarchy)<1) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Hierarchy bukan level terkecil (level '.$periode[0]['level_count'].')');
        }

        $target->nama = $params['nama'];
        $target->info_nilai = $params['info_nilai'];
        $target->info_lampiran = $params['info_lampiran'];
        $target->id_periode = $params['id_periode'];

        $target->id_level1 = $hierarchy[0]['id_level1'];
        $target->id_level2 = $hierarchy[0]['id_level2'];
        $target->id_level3 = $hierarchy[0]['id_level3'];
        $target->id_level4 = $hierarchy[0]['id_level4'];

        $target->is_special = $params['is_special'];
        $target->start_triwulan = $params['start_triwulan'];
        $target->ord = $params['ord'];
        $target->is_forced_complete = $params['is_forced_complete'] ?? false;

        $target->updated_at = date('Y-m-d H:i:s');
        $target->updated_by = $this->shared->user->um_id;
        $status = $target->save();

        if (!$status) {
            $errors = $target->getMessages();
            $error_messages = [];

            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }

            throw new ValidationException($error_messages);
        } else {
            // check instansi yg sudah disimpan
            $ready = $this->rawQuery('
                select 
                    id, 
                    id_instansi,
                    coalesce(klaim_tw1,0)+coalesce(klaim_tw2,0)+coalesce(klaim_tw3,0)+coalesce(klaim_tw4,0)+coalesce(klaim_tw5,0)+coalesce(klaim_tw6,0)+coalesce(klaim_tw7,0)+coalesce(klaim_tw8,0)+
                    coalesce(nilai_tw1,0)+coalesce(nilai_tw2,0)+coalesce(nilai_tw3,0)+coalesce(nilai_tw4,0)+coalesce(nilai_tw5,0)+coalesce(nilai_tw6,0)+coalesce(nilai_tw7,0)+coalesce(nilai_tw8,0)+coalesce(x,0) as dont_delete
                from jaga.str_target_master a 
                    left join (select id_master, count(1) as x from jaga.str_target_activities group by id_master) b on b.id_master = a.id
                where id_target='.$id
            );

            // if start triwulan > 1 then reset all verifikasi before it 
            if($params['start_triwulan'] > 1) {
                $set = [];
                for($x = 1; $x < $params['start_triwulan']; $x++){
                    $set[] = 'nilai_tw'.$x.'=null ';
                }
                $setall = implode(',', $set);

                $reset = $this->rawQuery('update jaga.str_target_master set '.$setall.' where id_target='.$id);

                $idm = $this->rawQuery('select id from jaga.str_target_master where id_target='.$id); 

                $ms = [];
                foreach($idm as $i) {
                    $ms[] = $i['id'];
                }
                $idm = implode(',', $ms);
                $droplog = $this->rawQuery('delete from jaga.str_target_log where id_master in ('.$idm.') and id_triwulan < '.$params['start_triwulan']);
            }

            $del = $dondel = [];
            foreach ($ready as $r) {
                if($r['dont_delete'] > 0) {
                    $dondel[] = $r['id_instansi'];
                } else {
                    $del[] = $r['id'];
                }
            }
            // delete yg belum di laporkan/verify
            if(count($del)>0) {
                $delete = $this->rawQuery('delete from jaga.str_target_master where id in ('.implode(',',$del).')');
            }

            if(count($params['instansi'])>0) {
                $instansi = $this->rawQuery("select * from jaga.instansi where id in (".implode(",", $params['instansi']).")");

                if (count($instansi)>0) {
                    foreach ($instansi as $i) { 
                        // kalau sudah ada, gak dimasukin
                        if(!in_array($i['id'], $dondel)) {
                            $master = new StranasNewMasterTarget();
                            $master->id_periode = $target->id_periode;
                            $master->id_target = $target->id;
                            $master->id_triwulan = 1;
                            $master->id_level1 = $target->id_level1;
                            $master->id_level2 = $target->id_level2;
                            $master->id_level3 = $target->id_level3;
                            $master->id_level4 = $target->id_level4;
                            $master->id_instansi = $i['id'];
                            $master->save();
                        }
                    }                
                }
            }

            if($params['is_special'] > 1) {
                // chek all where spcial log is not exist
                $spc = $this->rawQuery('select a.id, b.id as id_master from jaga.str_target_master a left join jaga.str_log_special b on b.id_master  = a.id where b.id is null and a.id_target = '.$target->id);
                if (count($spc)>0) {
                    foreach ($spc as $i) { 
                        $master = new StranasNewTargetSpecialLog();
                        $master->id_master = $i['id'];
                        $master->save();
                    }                
                }
            }

            return new CollectionPaginatedResponse([$target]);
        }
    }

    public function forceDelete($id)
    {
        // only admin and no regret
        $this->checkScopes(['stranas.admin']);

        $target  = $this->rawQuery('select * from jaga.new_target_instansi where id_master='.$id);    
        if (empty($target)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target tidak ditemukan');
        }

        $response = new \Phalcon\Http\Response();
        $response->setContentType('application/json', 'UTF-8');


        $del_attch  = $this->rawQuery("delete from jaga.str_target_attachment where id_log in (select id from jaga.str_target_log where id_master = $id )");
        $del_log    = $this->rawQuery("delete from jaga.str_target_log where id_master=(select id from jaga.str_target_master where id = $id)");
        $del_target = $this->rawQuery('delete from jaga.str_target_master where id ='.$id);

        $response->setContent(json_encode([
          'success' => true,
          'msg' => 'target deleted' 
        ]));

        return $response;
    }

    public function delete($id)
    {
        $this->checkScopes(['stranas.admin']);

        $target = StranasNewTarget::findFirst($id);

        if (empty($target)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target tidak ditemukan');
        }
        if (!empty($target->deleted_at)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target sudah terhapus');
        }
        $ready = $this->rawQuery('
            select 
                sum(coalesce(klaim_tw1,0)+coalesce(klaim_tw2,0)+coalesce(klaim_tw3,0)+coalesce(klaim_tw4,0)+coalesce(klaim_tw5,0)+coalesce(klaim_tw6,0)+coalesce(klaim_tw7,0)+coalesce(klaim_tw8,0)+
                coalesce(nilai_tw1,0)+coalesce(nilai_tw2,0)+coalesce(nilai_tw3,0)+coalesce(nilai_tw4,0)+coalesce(nilai_tw5,0)+coalesce(nilai_tw6,0)+coalesce(nilai_tw7,0)+coalesce(nilai_tw8,0)) is_lapor
            from jaga.str_target_master 
            where id_target='.$id
        );
        if ($ready[0]['is_lapor']>0) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target sudah pernah dilaporkan oleh instansi');
        }

        $now = date('Y-m-d H:i:s');
        $target->updated_at = $now;
        $target->deleted_at = $now;
        $target->deleted_by = $this->shared->user->um_id;
        $status = $target->save();

        if (!$status) {
            $errors = $target->getMessages();
            $error_messages = [];

            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }

            throw new ValidationException($error_messages);
        } else {
            return new CollectionPaginatedResponse([$target]);
        }
    }

    public function restored($id)
    {
        $this->checkScopes(['stranas.admin']);

        $target = StranasNewTarget::findFirst($id);

        if (empty($target)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target tidak ditemukan');
        }

        if (empty($target->deleted_at)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Target sudah aktif');
        }

        $target->deleted_at = NULL;
        $target->deleted_by = NULL;
        $status = $target->save();

        if (!$status) {
            $errors = $target->getMessages();
            $error_messages = [];

            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }

            throw new ValidationException($error_messages);
        } else {
            return new CollectionPaginatedResponse([$target]);
        }
    }
    // PANDUAN
    public function guide($id_target) {
        $data = StranasNewTargetGuide::findByIdTarget($id_target);

        if (empty($data)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Panduan indikator tidak ditemukan');
        }

        $response = new \Phalcon\Http\Response();
        $response->setContentType('application/json', 'UTF-8');
        $response->setContent(json_encode([
          'success' => true,
          'data' => [ 'rows' => $data ]
        ]));

        return $response;
    }

    public function addguide($id_target) {
        $this->checkScopes(['stranas.admin']);

        $rawBody = $this->request->getJsonRawBody(true);
        $params = $this->validate( $rawBody, [ 
            'aspek' => ['validators' => ['required']], 
            'bobot' => ['validators' => ['required']], 
            'catatan' => ['validators' => []], 
            'ord' => ['validators' => ['digit']]
        ]);
        
        $tbl = new StranasNewTargetGuide();
        $tbl->id_target = $id_target;
        $tbl->aspek = $params['aspek'];
        $tbl->bobot = $params['bobot'];
        $tbl->catatan = $params['catatan'];
        $tbl->ord = $params['ord'];
        $status = $tbl->save();

        if (!$status) {
            $errors = $tbl->getMessages();
            $error_messages = [];
            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }
            throw new ValidationException($error_messages);
        } else {
            return new CollectionPaginatedResponse([$tbl]);
        }
    }

    public function updateguide($id) {
        $this->checkScopes(['stranas.admin']);
        $tbl = StranasNewTargetGuide::findFirst($id);

        if (empty($tbl)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Panduan tidak ditemukan');
        }

        $rawBody = $this->request->getJsonRawBody(true);

        $params = $this->validate( $rawBody, [ 
            'aspek' => ['validators' => ['required']], 
            'bobot' => ['validators' => ['required']], 
            'catatan' => ['validators' => []], 
            'ord' => ['validators' => ['digit']]
        ]); 

        // validasi
        $tbl->aspek = $params['aspek'];
        $tbl->bobot = $params['bobot'];
        $tbl->catatan = $params['catatan'];
        $tbl->ord = $params['ord'];
        $status = $tbl->save();

        if (!$status) {
            $errors = $tbl->getMessages();
            $error_messages = [];

            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }

            throw new ValidationException($error_messages);
        } else {
            return new CollectionPaginatedResponse([$tbl]);
        }
    }
    public function deleteguide($id) {
        $this->checkScopes(['stranas.admin']);

        $tbl = StranasNewTargetGuide::findFirst($id);
        if (empty($tbl)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Panduan tidak ditemukan');
        }

        $status = $this->rawQuery('delete from jaga.str_target_guide where id='.$id);

        if (!$status) {
            $errors = $tbl->getMessages();
            $error_messages = [];

            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }

            throw new ValidationException($error_messages);
        } else {
            return new CollectionPaginatedResponse([]);
        }
    }

    // ACTIVITY
    public function activity($id_master) {
        $data = StranasNewMasterActivities::findByIdMaster($id_master);

        if (empty($data)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Activity tidak ditemukan');
        }

        $response = new \Phalcon\Http\Response();
        $response->setContentType('application/json', 'UTF-8');
        $response->setContent(json_encode([
          'success' => true,
          'data' => [ 'rows' => $data ]
        ]));

        return $response;
    }

    public function addactivity($id_master) {
        $this->checkScopes(['stranas.admin']);

        $rawBody = $this->request->getJsonRawBody(true);
        $params = $this->validate( $rawBody, [ 
            'name' => ['validators' => ['required']], 
        ]);

        $tbl = new StranasNewMasterActivities();
        $tbl->id_master = $id_master;
        $tbl->name = $params['name'];
        $status = $tbl->save();

        if (!$status) {
            $errors = $tbl->getMessages();

            $error_messages = [];
            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }
            throw new ValidationException($error_messages);
        } else {
            // add triwulan 
            return new CollectionPaginatedResponse([$tbl]);
        }
    }

    public function updateactivity($id) {
        $this->checkScopes(['stranas.admin']);
        $tbl = StranasNewMasterActivities::findFirst($id);

        if (empty($tbl)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Activity tidak ditemukan');
        }

        $rawBody = $this->request->getJsonRawBody(true);

        $params = $this->validate( $rawBody, [ 
            'name' => ['validators' => ['required']], 
        ]);

        // validasi
        $tbl->name = $params['name'];
        $status = $tbl->save();

        if (!$status) {
            $errors = $tbl->getMessages();
            $error_messages = [];

            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }

            throw new ValidationException($error_messages);
        } else {
            return new CollectionPaginatedResponse([$tbl]);
        }
    }

    public function deleteactivity($id) {
        $this->checkScopes(['stranas.admin']);

        $tbl = StranasNewMasterActivities::findFirst($id);
        if (empty($tbl)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Activity tidak ditemukan');
        }

        $status = $this->rawQuery('delete from jaga.str_target_activities where id='.$id);

        if (!$status) {
            $errors = $tbl->getMessages();
            $error_messages = [];

            foreach ($errors as $key => $error) {
                $error_messages[] = ["field" => $error->getField(), "message" => $error->getMessage()];
            }

            throw new ValidationException($error_messages);
        } else {
            return new CollectionPaginatedResponse([]);
        }
    }
}
