<?php

namespace App\Http\Controllers;
use App\Level;
use App\Degree;
use App\Subject;
use Illuminate\Http\Request;
use Validator;

class SubjectController extends Controller
{
      public function __construct () 
    {
          $this->middleware('auth:admin');
    }
     /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $subjects = Subject::all()->where( 'status' , '1' );
        $levels = Level::all()->where( 'status' , '1' );
        $degrees = Degree::all()->where( 'status' , '1' );
        return view('admin.subject.index')->withSubjects($subjects)->withLevels($levels)->withdegrees($degrees);
    }
    public function getLevelsbyDegree($id)
    {
         $output = '';
          $output .= '<label>Level
                              <select name="level" id="level" class="form-control" onchange="getSubject(this);" required>
                                  <option value="">Select Level</option>';
                                
       
          $levels = Level::all()->where( 'degree' ,  $id );
          foreach ($levels  as $level) {
              $output .= '<option value="'.$level->id.'">'.$level->name.'</option>';
          }
             $output .= '</select>
                          </label>';
          echo $output;
    }
    public function getSubjectsbyLevel($id)
    {
         $output = '';
          $output .= '<label>Subject
                              <select name="subject" id="subject" class="form-control" required>
                                  <option value="">Select Subject</option>';
                                
       
          $subjects = Subject::all()->where( 'level' ,  $id );
          foreach ($subjects  as $subject) {
              $output .= '<option value="'.$subject->id.'">'.$subject->name.'</option>';
          }
             $output .= '</select>
                          </label>';
          echo $output;
    }


    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        $levels = Level::all()->where( 'status' , '1' );
        $degrees = Degree::all()->where( 'status' , '1' );
        return view('admin.subject.create')->withLevels($levels)->withdegrees($degrees);

    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
          $customMessage = '';
        $validator = Validator::make($request->all(), [
            'name' => 'required'
        ]);
        if ($validator->fails()) {
            $validator_ArrayCount = $validator->errors()->toArray();
          
            foreach ($validator_ArrayCount as $key => $value) {
                $customMessage .= $value[$key].'<br>';
            }
           
             session()->flash('error', $customMessage);
        }
        else{

                $Subject = new Subject();

                $Subject->name = $request->name;
                $Subject->degree = $request->degree;
                $Subject->level = $request->level;
                $Subject->slug = $request->slug;
                $Subject->status = 1;
                $res = $Subject->save();

             
            if($res)
            {
                session()->flash('success', 'Subject successfully created');
                return redirect()->route('subject.index');
            }
        }
         
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Subject  $Subject
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        
        $subject = Subject::find($id);
        return view('admin.subject.show')->withSubject($subject);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Subject  $coachingtype
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $subject = Subject::find($id);
        $levels = Level::all()->where( 'status' , '1' );
        $degrees = Degree::all()->where( 'status' , '1' );
        return view('admin.subject.edit')->withSubject($subject)->withLevels($levels)->withdegrees($degrees);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Subject  $coachingtype
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $customMessage = '';

        $validator = Validator::make($request->all(), [          
            'name' => 'required'
        ]);
        if ($validator->fails()) {
            $validator_ArrayCount = $validator->errors()->toArray();
          
            foreach ($validator_ArrayCount as $key => $value) {
                $customMessage .= $value[$key].'<br>';
            }
           
             session()->flash('error', $customMessage);
        }
        else
        {

            $Subject = Subject::find($id);

            $Subject->name = $request->name;
            $Subject->degree = $request->degree;
            $Subject->level = $request->level;
            $Subject->slug = $request->slug;
            $Subject->status = 1;
            $res = $Subject->save();
            if($res)
            {
                session()->flash('success', 'Subject successfully updated');
                return redirect()->route('subject.index');
            }

        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Subject  $Subject
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        Subject::where('id', $id)->delete();
        session()->flash('success','Subject was successfully deleted!!!');
        return redirect()->route('subject.index');
    }
}
