<?php

namespace App\Repositories;

use App\Models\Auth\Biodata;
use Auth;
use Illuminate\Support\Str;

class UserdetailRepository
{
    public function __construct(Biodata $model)
    {
        $this->model = $model;
    }

    public function findbyid($id = null, $with = null)
    {
        return $this->model
            ->when($with, function ($query) use ($with) {
                return $query->with($with);
            })
            ->when($id, function ($query) use ($id) {
                return $query->where('id', $id);
            })
            ->first();
    }

    public function findbyuser($userid = null, $with = null, $nim = null)
    {
        return $this->model
            ->when($with, function ($query) use ($with) {
                return $query->with($with);
            })
            ->when($userid, function ($query) use ($userid) {
                return $query->where('user_id', $userid);
            })
            ->when($nim, function ($query) use ($nim) {
                return $query->where('noidentitas', $nim);
            })
            ->first();
    }

    public function get($id = null, $with = null, $fakultas = null, $limit = 3000)
    {
        return $this->model
            ->when($id, function ($query) use ($id) {
                return $query->where('id', $id);
            })
            ->when($with, function ($query) use ($with) {
                return $query->with($with);
            })
            ->when($fakultas, function ($query) use ($fakultas) {
                return $query->where('fakultas', $fakultas);
            })
            ->orderBy('prodi', 'asc')
            ->limit($limit)
            ->get();
    }

    public function store($request)
    {
        $data = $request->except('_token');
        $data['id'] = (string) Str::uuid();
        $data['user_id'] = Auth::user()->id;
        $data['userid_created'] = Auth::user()->id;
        $data['userid_updated'] = Auth::user()->id;
        $biodata = $this->model->create($data);

        return $biodata;
    }

    public function storeSso($id, $data)
    {

        $data['id'] = $id;
        $data['noidentitas'] = $data['noid'];
        $data['type'] = $data['role'];
        $data['origin'] = 'Universitas Negeri Surabaya';

        return $this->model->create($data);
    }
}