middleware('auth'); $this->_viewname = 'metricdataimport'; $this->_title = 'Metric Data Import'; $this->_base_url = '/metricdataimport'; } protected function get_form_fields($type, $values) { return [ 'file_upload' => ['title' => 'Import File', 'type' => 'file', 'required' => true], 'is_bde' => ['title' => 'Is Dashboard Metric?', 'type' => 'yesno', 'required' => true] ]; } // $response = LambdaRequest::signedrequest('post', 'catalog', 'activity/metric_target_import', $data); public function list(Request $request) { $response = LambdaRequest::signedrequest('get', 'catalog', 'metricdataimport/get_all'); // echo '
'; print_r($response); exit;
        if ($response->statusCode == 401) {
            return redirect('/unauthorised');
        }
        $fields = $this->get_list_fields();
        //echo '
'; print_r($fields); exit;
        return $this->view($this->_listtype)->with([
            'title' => $this->_title,
            'fields' => $fields,
            'base_url' => $this->_base_url,
            'items' => $response->data->items,
            'buttons' => $this->get_list_buttons()
        ]);
    }

    protected function get_list_fields()
    {
        return [
            'actions' => ['title' => 'Actions', 'buttons' => ['edit', 'delete', 'download_file' => ['icon' => 'cloud-download',  'querystring' => 'id={DOWNLOAD_URL}']]],
            'file_name' => ['title' => 'File Name', 'type' => 'text'],
            'status' => ['title' => 'Status', 'type' => 'select']
        ];
    }

    public function download_file($download_url)
    {
        // echo '
'; print_r(['id'=> $download_url->id]); exit;
        return redirect($download_url->id);
    }

    // public function list(Request $request)
    // {
    //     $values = [];
    //     $fields = $this->get_form_fields('new', $values);

    //     return $this->view('form')->with([
    //         'title' => $this->_title,
    //         'mode' => 'new',
    //         'fields' => $fields,
    //         'base_url' => $this->_base_url,
    //         'item' => $values,
    //     ]);
    // }

    protected function _uploadMedia($request, $name = 'image', $folder = 'image', $prefix = '')
    {
        $path = '';
        try {
            $file = $request->file($name);
            if (!$file) {
                return $path;
            }

            $filename = str_replace(' ', '_', $file->getClientOriginalName());
            if ($prefix !== '') {
                $filename = $prefix . '_' . $filename;
            }

            $path = $file->storeAs($folder, uniqid() . '_' . $filename, 's3');
            $path = rtrim(env('AWS_URL', 'https://did94hhhcgq1d.cloudfront.net'), '/') . '/' . $path;
        } catch (\Throwable $e) {
            Log::debug($e->getMessage());
        }

        return $path;
    }

    public function postajaxsave(Request $request, $type = '')
    {
        try {
            $request->validate([
                'file_upload' => 'required|file|max:10240',
                'is_bde' => 'required',
            ]);

            $is_bde = $request->input('is_bde') == 'yes' ? true : false;

            $path = $this->_uploadMedia($request, 'file_upload', 'metric_data_import');

            if (!$path) {
                return response()->json(
                    [
                        'status' => 'error',
                        'message' => 'File upload failed',
                    ],
                    500,
                );
            }

            $data = [
                'file_path' => $path,
                'partition' => 'rapport-' . Auth::user()->domain,
                'is_bde' => $is_bde
            ];

            Log::debug(print_r($data, true));


            $response = LambdaRequest::signedrequest('post', 'catalog', 'metricdataimport/metric_target_import', $data);
            // echo "
"; print_r($response); exit;
            if (isset($response->statusCode) && $response->statusCode == 200 && $response->status === 'success') {
                return response()->json(
                    [
                        'statusCode' => $response->statusCode,
                        'status' => $response->status,
                        'message' => $response->message,
                        'data' => $response->data,
                    ],
                    200,
                );
            }

            return response()->json(
                [
                    'statusCode' => $response->statusCode ?? 500,
                    'status' => 'error',
                    'message' => !empty($response->message)
                        ? $response->message
                        : 'Import failed',
                    'data' => [],
                ],
                500,
            );
        } catch (\Exception $e) {
            \Log::error($e->getMessage());

            return response()->json(
                [
                    'status' => 'error',
                    'message' => 'Something went wrong',
                ],
                500,
            );
        }
    }

    public function delete($id) {
        // echo '
'; print_r($id); exit;
        $response = LambdaRequest::signedrequest('get', 'catalog', 'metricdataimport/delete', ['id' => $id]);
        // echo '
'; print_r($response); exit;
        if($response->statusCode == 200 && $response->status == "success") {
            //echo '
'; print_r($response); exit;
            return redirect($this->_base_url.'s')->withMessage('Successfully Marked Deleted !!!');
        } else {
            return redirect($this->_base_url.'s')->withError('Some Error occured! '. $response->message);
            //return \Redirect::back()->withMessage('Some Error occured!');
        }
    }
}