<?php

namespace Yas\Member\Http\Controllers\Admin;

use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Event;
use Yas\AdminTheme\DataGrids\Customers\ReviewDataGrid;
use Yas\AdminTheme\Http\Controllers\Controller;
use Yas\AdminTheme\Http\Requests\MassDestroyRequest;
use Yas\AdminTheme\Http\Requests\MassUpdateRequest;
use Webkul\Product\Repositories\ProductReviewRepository;
//use Yas\FrontTheme\Repositories\ConsignmentEnquiryRepository;
use Yas\Member\Repositories\ConsignmentEnquiryRepository;
use Yas\AdminTheme\DataGrids\Customers\ConsignmentDataGrid;
use Webkul\Attribute\Repositories\AttributeFamilyRepository;
use Webkul\Attribute\Repositories\AttributeRepository;
use Webkul\Attribute\Repositories\AttributeGroupRepository;
use Illuminate\Support\Facades\DB;
use Webkul\Attribute\Repositories\AttributeOptionRepository;

class ConsignmentEnquiryController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct(protected ProductReviewRepository $productReviewRepository,protected ConsignmentEnquiryRepository $consignmentEnquiryRepository,
    protected AttributeFamilyRepository $attributeFamilyRepository,protected AttributeRepository $attributeRepository,protected AttributeGroupRepository $attributeGroupRepository) {}

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\View\View
     */
    public function index()
    {
        
        if (request()->ajax()) {
            return datagrid(ConsignmentDataGrid::class)->process();
        }

        $families = $this->attributeFamilyRepository->all();

        return view('yas_member::admin.consignment.index',compact('families'));
        
    }

    /**
     * Consignment Details
     */
    public function edit(int $id): JsonResponse
    {
        $consignment = $this->consignmentEnquiryRepository->with(['images'])->findOrFail($id);
        
        //$consignment->date = $consignment->created_at->format('Y-m-d');
        $attributeGroupId = DB::table('attribute_groups')
        ->where('code', 'custom')
        ->value('id');
        
        $attributeIds = DB::table('attribute_group_mappings')
        ->where('attribute_group_id', $attributeGroupId)
        ->pluck('attribute_id')
        ->toArray();
        $attributes = $this->attributeRepository->whereIn('id',$attributeIds) ->pluck('admin_name', 'code')
        ->toArray();

        $brandLabel = null;

        if ($consignment->brand) {
            $brandOption = app(AttributeOptionRepository::class)
                ->find($consignment->brand);

            $brandLabel = $brandOption?->admin_name ?? $brandOption?->label;
        }
        $consignment->brand_label = $brandLabel;

        return new JsonResponse([
            'data' => $consignment,
            'attributes' => $attributes,
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @return \Illuminate\Http\Response
     */
    public function update(int $id)
    {
        $this->validate(request(), [
            'status' => 'required|in:approved,disapproved,pending',
        ]);


        $consignment = $this->consignmentEnquiryRepository->update([
            'status' => request()->input('status'),
        ], $id);

        
        return new JsonResponse([
            'message' => trans('yas_admin::app.customers.consignment.index.datagrid.update-success'),
        ]);
    }

    /**
     * Delete the consignment of the current product
     */
    public function destroy(int $id): JsonResponse
    {
        try {
            //Event::dispatch('customer.consignment.delete.before', $id);

            $this->consignmentEnquiryRepository->delete($id);

            //Event::dispatch('customer.consignment.delete.after', $id);

            return new JsonResponse([
                'message' => trans('yas_admin::app.customers.consignment.index.datagrid.delete-success', ['name' => 'Consignment']),

            ]);
        } catch (\Exception $e) {
            return new JsonResponse([
                'message' => trans('yas_admin::app.response.delete-failed', ['name' => 'Consignment']),
            ], 500);
        }
    }

    /**
     * Mass delete the consignments on the products.
     */
    public function massDestroy(MassDestroyRequest $massDestroyRequest): JsonResponse
    {
        $indices = $massDestroyRequest->input('indices');

        try {
            foreach ($indices as $index) {
                //Event::dispatch('customer.consignment.delete.before', $index);

                $this->consignmentEnquiryRepository->delete($index);

                //Event::dispatch('customer.consignment.delete.after', $index);
            }

            return new JsonResponse([
                'message' => trans('yas_admin::app.customers.consignment.index.datagrid.mass-delete-success'),
            ], 200);
        } catch (\Exception $e) {
            return new JsonResponse([
                'message' => $e->getMessage(),
            ], 500);
        }
    }

    /**
     * Mass approve the consignments on the products.
     */
    public function massUpdate(MassUpdateRequest $massUpdateRequest): JsonResponse
    {
        $indices = $massUpdateRequest->input('indices');

        foreach ($indices as $id) {
            //Event::dispatch('customer.consignment.update.before', $id);

            $consignment = $this->consignmentEnquiryRepository->update([
                'status' => $massUpdateRequest->input('value'),
            ], $id);

            //Event::dispatch('customer.consignment.update.after', $consignment);
        }

        return new JsonResponse([
            'message' => trans('yas_admin::app.customers.consignment.index.datagrid.mass-update-success'),
        ], 200);
    }
}
