<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use App\Http\Resources\ProjectResource;
use App\Http\Resources\UserProjectMemberResource;
use App\User;
use App\UserProject;
use App\Project;
use Validator;
use DB;

class ProjectController extends Controller
{
    const ITEM_PER_PAGE = 20;

    private $_user = null;

    public function __construct()
    {
        $this->_user = auth('api')->user();
    }

    public function index(Request $request)
    {
        $searchParams = $request->all();
        $limit = Arr::get($searchParams, 'limit', static::ITEM_PER_PAGE);
        $siteId = Arr::get($searchParams, 'site_id', '');
        $keyword = Arr::get($searchParams, 'keyword', '');

        $userProjectIds = UserProject::where('user_id', $this->_user->id)->pluck('project_id')->toArray();
        $list = Project::isPublished()->where('site_id', $siteId)->whereIn('id', $userProjectIds);

        if (!empty($keyword)) {
            $list->where('name', 'LIKE', '%' . $keyword . '%');
        }

        $list->orderBy('position')->orderBy('id');

        return ProjectResource::collection($list->paginate($limit));
    }

    public function groupMember(Request $request)
    {
        $searchParams = $request->all();
        $limit = Arr::get($searchParams, 'limit', static::ITEM_PER_PAGE);
        $projectId = Arr::get($searchParams, 'project_id', '');

        $userIds = DB::table('user_projects')
            ->join('user_project_members', 'user_projects.id', '=', 'user_project_members.user_project_id')
            ->select('user_project_members.user_id')
            ->where('user_projects.user_id', $this->_user->id)
            ->where('user_projects.project_id', $projectId)
            ->pluck('user_id')
            ->toArray();

        $list = User::where('is_deleted', false)
            ->where('is_activated', true)
            ->where('is_leader', 0)
            ->whereIn('id', $userIds)
            ->orderBy('id');

        return UserProjectMemberResource::collection($list->paginate($limit));
    }
}
