<?php

namespace App\Repositories;

use App\Models\CommunityCoupons;

class CommunityCouponsRepository
{
    public function __construct(
        CommunityCoupons $communityCoupons
    ) {
        $this->model = $communityCoupons;
    }

    public function addCoupon($val)
    {
        $expected = [
            'coupon_name' => '',
            'coupon_code' => '',
            'type' => '',
            'valid_from' => '',
            'valid_to' => 1,
            'discount_percentage',
        ];
        extract(array_merge($expected, $val));

        $coupon = $this->model->newInstance();
        $coupon->coupon_name = $coupon_name;
        $coupon->coupon_code = $coupon_code;
        $coupon->type = $type;
        $coupon->valid_from = $valid_from;
        $coupon->valid_to = $valid_to;
        $coupon->discount_percentage = $discount_percentage;
        $coupon->save();
    }

    public function editCoupon($coupon, $val)
    {
        $expected = [
            'coupon_name' => '',
            'coupon_code' => '',
            'type' => '',
            'valid_from' => '',
            'valid_to' => 1,
            'discount_percentage',
        ];
        extract(array_merge($expected, $val));

        $coupon->coupon_name = $coupon_name;
        $coupon->coupon_code = $coupon_code;
        $coupon->type = $type;
        $coupon->valid_from = $valid_from;
        $coupon->valid_to = $valid_to;
        $coupon->discount_percentage = $discount_percentage;
        $coupon->save();
    }

    public function getCoupons($limit = 10)
    {
        return $this->model
            ->orderBy('id', 'desc')
            ->paginate($limit);
    }

    public function getById($id)
    {
        return $this->model
            ->where('id', $id)
            ->first();
    }

    public function getByCouponCode($coupon_code, $type)
    {
        return $this->model
            ->where('coupon_code', $coupon_code)
            ->where('type', $type)
            ->first();
    }
}
