<?php

namespace App\Http\Controllers\Admincp;

use App\Http\Controllers\Traits\LazyLoadsRepositories;
use Illuminate\Http\Request;

class PageController extends AdmincpController
{ 
    use LazyLoadsRepositories;
    
	public function __construct()
    {
        parent::__construct();
        $this->activePage('page');
    }

    public function index(Request $request)
    {
        return $this->theme->view('pages.list', ['pages' => $this->pageRepository()->lists(null, 20, $request->get('term'))])->render();
    }

    public function editPage($id, Request $request)
    {
        $page = $this->pageRepository()->get($id);

        $message = null;

        if ($val = $request->get('val')) {
            $this->pageRepository()->adminEdit($val, $page);
            $message = 'Saved successfully';
        }

        return $this->theme->view('pages.edit', ['page' => $page, 'message' => $message])->render();
    }

    public function categories()
    {
        return $this->theme->view('pages.categories', ['categories' => $this->pageCategoryRepository()->lists()])->render();
    }
	
	public function kycDetails()
    {
        $pages = $this->pageRepository()->kycUploadedStores(20, request()->get('term'), request()->get('kyc'));
        return $this->theme->view('pages.kyc-details', ['pages' => $pages])->render();
    }

    public function updateKycCompleted(Request $request)
    {
        $pageId = (int) $request->get('page_id');
        $kycCompleted = (int) $request->get('kyc_completed');
        $isAjax = $request->ajax() || $request->wantsJson();

        if ($pageId <= 0 || !in_array($kycCompleted, [0, 1], true)) {
            return $isAjax
                ? response()->json(['success' => false, 'message' => 'Invalid request'], 422)
                : redirect()->back();
        }

        $page = $this->pageRepository()->get($pageId);
        if (!$page) {
            return $isAjax
                ? response()->json(['success' => false, 'message' => 'Page not found'], 404)
                : redirect()->back();
        }

        // Avoid SQL errors on installs without this column
        if (class_exists('Schema') && !\Schema::hasColumn('pages', 'kyc_completed')) {
            return $isAjax
                ? response()->json(['success' => false, 'message' => 'kyc_completed column missing'], 500)
                : redirect()->back();
        }

        $page->kyc_completed = $kycCompleted;
        $page->save();

        return $isAjax
            ? response()->json(['success' => true])
            : redirect()->back();
    }

    public function createCategory(Request $request)
    {
        $this->setTitle('Create Page Category');
        $message = null;
        if ($val = $request->get('val')) {
            $category = $this->pageCategoryRepository()->add($val);
            if ($category) {
                $message = 'Category added successfully';
            } else {
                $message = 'Failed to add category due to existence or invalid details';
            }
        }

        return $this->theme->view('pages.create-category', ['message' => $message])->render();
    }

    public function editCategory($id, Request $request)
    {
        $this->setTitle('Edit Page Category');
        $category = $this->pageCategoryRepository()->get($id);

        if (! $category) {
            return redirect(\URL::previous());
        }

        $message = null;

        if ($val = $request->get('val')) {
            $s = $this->pageCategoryRepository()->save($val, $category);
            if ($s) {
                $message = 'Category save successfully';
            } else {
                $message = 'Failed to add category due to existence or invalid details';
            }
        }

        return $this->theme->view('pages.edit-category', ['message' => $message, 'category' => $category])->render();

    }

    public function deleteCategory($id)
    {
        $this->pageCategoryRepository()->delete($id);

        return redirect(\URL::previous());
    }

    public function subCategories()
    {
        return $this->theme->view('pages.subcategories', ['subcategories' => $this->subCategoryRepository()->lists()])->render();
    }

    public function createSubCategory(Request $request)
    {
        $this->setTitle('Create Page Sub Category');
        $message = null;
        if ($val = $request->get('val')) {
            $category = $this->subCategoryRepository()->add($val);
            if ($category) {
                $message = 'Sub category added successfully';
            } else {
                $message = 'Failed to add sub category due to existence or invalid details';
            }
        }

        return $this->theme->view('pages.create-subcategory', ['message' => $message, 'categories' => $this->pageCategoryRepository()->listAll()])->render();
    }

    public function deleteSubCategory($id)
    {
        $this->subCategoryRepository()->delete($id);

        return redirect(\URL::previous());
    }
}




