<?php

namespace App\Services;

use App\Http\Controllers\Traits\ValidationTrait;
use App\Repository\WishListRepository;
use App\WishlistUserDeveloper;
use App\WishlistUserResidentalCom;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

class WishListService
{
    use ValidationTrait;
    /** @var WishListRepository */
    private $withListRepository;

    public function __construct(
        WishListRepository $wishListRepository
    ) {
        $this->withListRepository = $wishListRepository;
    }

    public function subscribeToDeveloper($request, $user)
    {
        $data = $request->request->all();
        $wishListUserDeveloper = $this->withListRepository->findByDeveloper($user->id, $data['developer_id']);
        if ($data['subscribe'] == true) {
            if ($wishListUserDeveloper) {
                throw new BadRequestHttpException('User already subscribed for developer');
            }
            $wishListUserDeveloper = new WishlistUserDeveloper();
            $wishListUserDeveloper->developer_id = $request->input('developer_id');
            $wishListUserDeveloper->user_id = $user->id;
            $wishListUserDeveloper->save();
        } else {
            if (!$wishListUserDeveloper) {
                throw new BadRequestHttpException('User already unsubscribed for developer');
            }
            $wishListUserDeveloper->forceDelete();
        }
    }

    public function subscribeUserResidentialComplex($request, $user)
    {
        $data = $request->request->all();
        $wishListUserResidentialComplex = $this->withListRepository
            ->findByResidentialComplex($user->id, $data['residential_complex_id']);
        if ($data['subscribe'] == true) {
            if ($wishListUserResidentialComplex) {
                throw new BadRequestHttpException('User already subscribed for residential complex');
            }
            $wishListUserResidentialComplex = new WishlistUserResidentalCom();
            $wishListUserResidentialComplex->residental_complex_id = $request->input('residential_complex_id');
            $wishListUserResidentialComplex->user_id = $user->id;
            $wishListUserResidentialComplex->save();
        } else {
            if (!$wishListUserResidentialComplex) {
                throw new BadRequestHttpException('User already unsubscribed for residential complex');
            }
            $wishListUserResidentialComplex->forceDelete();
        }
    }

    public function updateSubscribedUserResidentialComplex()
    {
    }
}
