<?php

namespace Modules\Coupon\Admin;

use Modules\Admin\Ui\Tab;
use Modules\Admin\Ui\Tabs;
use Modules\Coupon\Entities\Coupon;
use Modules\Category\Entities\Category;

class CouponTabs extends Tabs
{
    public function make()
    {
        $this->group('coupon_information', trans('coupon::coupons.tabs.group.coupon_information'))
            ->active()
            ->add($this->general())
            ->add($this->usageRestrictions())
            ->add($this->usageLimits());
    }

    public function general()
    {
        return tap(new Tab('general', trans('coupon::coupons.tabs.general')), function (Tab $tab) {
            $tab->active();
            $tab->weight(5);

            $tab->fields([
                'name',
                'code',
                'is_percent',
                'value',
                'free_shipping',
                'start_date',
                'end_date',
                'is_active',
            ]);

            $tab->view('coupon::admin.coupons.tabs.general');
        });
    }

    public function usageRestrictions()
    {
        return tap(new Tab('usage_restrictions', trans('coupon::coupons.tabs.usage_restrictions')), function (Tab $tab) {
            $tab->weight(10);
            $tab->fields(['minimum_spend']);

            $coupon = Coupon::withoutGlobalScope('active')->findOrNew(request('id'));

            $tab->view('coupon::admin.coupons.tabs.usage_restrictions', [
                'products' => $coupon->productList(),
                'excludeProducts' => $coupon->excludeProductList(),
                'categories' => Category::treeList(),
            ]);
        });
    }

    private function usageLimits()
    {
        return tap(new Tab('usage_limits', trans('coupon::coupons.tabs.usage_limits')), function (Tab $tab) {
            $tab->weight(15);
            $tab->fields(['usage_limit_per_coupon', 'usage_limit_per_customer']);
            $tab->view('coupon::admin.coupons.tabs.usage_limits');
        });
    }
}