<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\DaDocumentCategory;
use App\DaDocumentSubCategory;
use App\DaDocCategory;
use App\DaDocumentMaster;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;

class DaDocumentMasterController extends Controller
{
    public function index()
    {
        try {
            $categories    = DaDocumentCategory::with('subCategories')->orderBy('id', 'desc')->get();
            $docCategories = DaDocCategory::orderBy('id', 'desc')->get();
            $documents     = DaDocumentMaster::with('docCategory')->orderBy('id', 'desc')->get();
        } catch (\Exception $e) {
            $categories    = collect();
            $docCategories = collect();
            $documents     = collect();
        }

        return view('admin.da-system.document-masters.index', compact('categories', 'docCategories', 'documents'));
    }

    public function storeCategory(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        DaDocumentCategory::create([
            'name' => $request->input('name'),
            'description' => $request->input('description'),
            'status' => $request->has('status') ? 1 : 0,
        ]);

        Session::flash('success', 'Partner Main Category created successfully.');
        return redirect()->back();
    }

    public function updateCategory(Request $request, $id)
    {
        $category = DaDocumentCategory::findOrFail($id);

        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        $category->update([
            'name' => $request->input('name'),
            'description' => $request->input('description'),
            'status' => $request->has('status') ? 1 : 0,
        ]);

        Session::flash('success', 'Partner Main Category updated successfully.');
        return redirect()->back();
    }

    public function destroyCategory($id)
    {
        $category = DaDocumentCategory::findOrFail($id);
        $category->delete();

        Session::flash('success', 'Partner Main Category deleted successfully.');
        return redirect()->back();
    }

    public function storeSubCategory(Request $request)
    {
        $request->validate([
            'category_id' => 'required|integer',
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        DaDocumentSubCategory::create([
            'category_id' => $request->input('category_id'),
            'name' => $request->input('name'),
            'description' => $request->input('description'),
            'status' => $request->has('status') ? 1 : 0,
        ]);

        Session::flash('success', 'Partner Sub-Category created successfully.');
        return redirect()->back();
    }

    public function updateSubCategory(Request $request, $id)
    {
        $subCategory = DaDocumentSubCategory::findOrFail($id);

        $request->validate([
            'category_id' => 'required|integer',
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        $subCategory->update([
            'category_id' => $request->input('category_id'),
            'name' => $request->input('name'),
            'description' => $request->input('description'),
            'status' => $request->has('status') ? 1 : 0,
        ]);

        Session::flash('success', 'Partner Sub-Category updated successfully.');
        return redirect()->back();
    }

    public function destroySubCategory($id)
    {
        $subCategory = DaDocumentSubCategory::findOrFail($id);
        $subCategory->delete();

        Session::flash('success', 'Partner Sub-Category deleted successfully.');
        return redirect()->back();
    }

    public function storeDocCategory(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        DaDocCategory::create([
            'name' => $request->input('name'),
            'description' => $request->input('description'),
            'status' => $request->has('status') ? 1 : 0,
        ]);

        Session::flash('success', 'Document Category created successfully.');
        return redirect()->back();
    }

    public function updateDocCategory(Request $request, $id)
    {
        $docCat = DaDocCategory::findOrFail($id);

        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        $docCat->update([
            'name' => $request->input('name'),
            'description' => $request->input('description'),
            'status' => $request->has('status') ? 1 : 0,
        ]);

        Session::flash('success', 'Document Category updated successfully.');
        return redirect()->back();
    }

    public function destroyDocCategory($id)
    {
        $docCat = DaDocCategory::findOrFail($id);
        $docCat->delete();

        Session::flash('success', 'Document Category deleted successfully.');
        return redirect()->back();
    }

    public function storeDocument(Request $request)
    {
        $request->validate([
            'doc_category_id' => 'required|integer',
            'name' => 'required|string|max:255',
            'code' => 'nullable|string|max:100',
            'description' => 'nullable|string',
        ]);

        DaDocumentMaster::create([
            'doc_category_id' => $request->input('doc_category_id'),
            'name' => $request->input('name'),
            'code' => $request->input('code'),
            'description' => $request->input('description'),
            'status' => $request->has('status') ? 1 : 0,
        ]);

        Session::flash('success', 'Master Document created successfully.');
        return redirect()->back();
    }

    public function updateDocument(Request $request, $id)
    {
        $document = DaDocumentMaster::findOrFail($id);

        $request->validate([
            'doc_category_id' => 'required|integer',
            'name' => 'required|string|max:255',
            'code' => 'nullable|string|max:100',
            'description' => 'nullable|string',
        ]);

        $document->update([
            'doc_category_id' => $request->input('doc_category_id'),
            'name' => $request->input('name'),
            'code' => $request->input('code'),
            'description' => $request->input('description'),
            'status' => $request->has('status') ? 1 : 0,
        ]);

        Session::flash('success', 'Master Document updated successfully.');
        return redirect()->back();
    }

    public function destroyDocument($id)
    {
        $document = DaDocumentMaster::findOrFail($id);
        $document->delete();

        Session::flash('success', 'Master Document deleted successfully.');
        return redirect()->back();
    }
}
