<?php

namespace App\Http\Controllers;

use App\Model\User;
use Auth;
use DB;
use App\Model\Bids;
use App\Model\Projects;
use App\Model\Orders;
use App\Model\Subjects;
use App\Model\Category;
use App\Model\Entity\Feedback;
use App\Model\Feedbacks;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;

class DashboardController extends Controller
{
  public function __construct()
  {
    $this->middleware('auth');
    $this->middleware('RegistrationStage');
  }

  public function index()
  {
    $alert = 0;
    $bids = Bids::where(['bids.freelancer_id' => Auth::user()->id])->WhereHas('project', function ($q) {
      $q->where(['status'=>'RTA','delete_status' => 0 ]);
    })->take(5)->get();

    #todo:: related condition
    $relatedProject = Projects::select(["*", DB::raw("(select count(id) from bids where project_id = projects.id ) as bids")])->where(['status'=> 'RTA','delete_status' => 0 ])->where('bid_expiry_date', '>', date('y-m-d h:i:s'))->orderby('id', 'desc')->take(5)->get();
    $feedback = [];
    $user = Auth::user();
    if($user->reg_stage == 4 && $user->approve_alert == 0 ){
      $alert = 1;
      $user->approve_alert =1;
      $user->save();
    }
    $freelancers = [
      ['name' => 'Mirza Gaba', 'designation' => 'SEO Writer', 'image' => 'seo2.png', 'earnings' => 6494],
      ['name' => 'Divya Dewan', 'designation' => 'Physicist', 'image' => 'report5.png', 'earnings' => 5332],
      ['name' => 'Nikhil Rajwanshi', 'designation' => 'Content Analyst', 'image' => 'online4.png', 'earnings' => 3861],
      ['name' => 'Gaurav Khanna', 'designation' => 'Summary Writer', 'image' => 'research4.png', 'earnings' => 3492]
    ];

    #earnings
    // DB::enableQueryLog();
    $earnings = Projects::select([DB::raw('SUM(CASE WHEN `status` ="Accepted" || `status` ="Delivered" THEN projects.price ELSE 0 END ) AS total_earning ,SUM((CASE WHEN `status` ="Accepted" || `status` ="Delivered" THEN 1 ELSE 0 END)) AS total_submited, SUM( (CASE WHEN `status` ="Accepted" || `status` ="Delivered" || `status` ="Cancelled" THEN 0 ELSE 1 END) ) AS total_pending')])->where(['freelancer_id' => $user->id,'delete_status' => 0 ])->whereNotIn('status', ['Disable', 'RTA'])->get()->first();
    // dd(DB::getQueryLog());
    #alloted projects
    // $orders = Orders::where(['freelancer_id' => $user->id])->with('project')->get();
    $orders =  Projects::whereNotIn('status', ['Disable', 'RTA','Accepted', 'Delivered', 'Cancelled'])->where(['delete_status' => 0,'freelancer_id'=>$user->id])->get();
// dd($order);

    $projectStatus = ['Accepted', 'Delivered', 'Cancelled'];

    // $feedback = Feedbacks::select('p.*','feedbacks.*')->join('projects as p', 'p.id', '=', 'feedbacks.project_id')->where(['p.status' =>'Feedback','p.freelancer_id'=>$user->id])->orderBy('feedbacks.id', 'desc')->groupBy('feedbacks.project_id')->get()->toArray();
    $pageData = new \stdClass(); 
    $pageData->title = "Dashboard";

    return view('dashboard/index', compact('bids', 'relatedProject', 'user', 'freelancers', 'earnings', 'orders', 'pageData', 'feedback','alert'));
  }

  public function profile()
  {
    $user = Auth::user();
    $subjects = Subjects::where(['status' => 1])->get();
    $category = Category::where(['status' => 1])->get();

    $degree = ["BA", "MA", "BBA", "MBA", "M.Tech", "B.Tech", "Other"];

    $rank = 'Beginner';
    if ($user->experience && $user->experience > 4) {
      $rank = 'Experienced';
    } elseif ($user->experience && $user->experience > 2) {
      $rank = 'Intermediate';
    }
    $pageData = new \stdClass();
    $pageData->title = ucwords($user->name). "'s Profile";//Str::limit(ucwords($user->name), 10, ('')) 

    return view('dashboard/profile', compact('user', 'subjects', 'degree', 'rank', 'pageData', 'category'));
  }

  public function saveProfile(Request $request)
  {
    $reqData = $request->all();
    if (isset($reqData['proficient'])) $reqData['proficient'] = implode(',', $reqData['proficient']);
    $profile_percentage = Auth::user()->profile_percentage;
    $address = Auth::user()->address;
    $paypal = Auth::user()->paypal;
    $bank_name = Auth::user()->bank_name;
    #TODO::calculate profile percentage
    $coff = 0;
    if (Auth::user()->mobile_verify) {
      $coff = 10;
    }
    if (@empty($address) && isset($reqData['address'])) {
      $reqData['profile_percentage'] =  $profile_percentage + 40;
    } else if ($profile_percentage < 100 && (@empty($paypal) || @empty($bank_name)) &&  (isset($reqData['paypal']) || isset($reqData['bank_name']))) {
      $reqData['profile_percentage'] =  $profile_percentage + 40;
    }

    if (isset($reqData['profile_percentage'])) $reqData['profile_percentage'] = $reqData['profile_percentage'] - $coff;

    #password
    if (isset($reqData['password'])) {
      if (md5($reqData['password']) == Auth::user()->password) {
        return ['status' => 0, "message" => "New password can't be same as old password"];
      } else if (md5($reqData['currentPassword']) == Auth::user()->password) {
        if ($reqData['password'] == $reqData['cpassword']) {
          $reqData['password'] = md5($reqData['password']);
        } else {
          return ['status' => 0, "message" => "Password mismatch!"];
        }
      } else {
        return ['status' => 0, "message" => "Wrong password!"];
      }
    }

    if ($request->cheque) {
      // $s = Storage::disk('s3')->put('workolics/cheque', $request->cheque);
      // dd($s);
      $reqData['cheque'] = $this->uploadOnS3('cheque', $request->cheque);
    }

    if ($request->panCard) {
      $reqData['pan_card'] = $this->uploadOnS3('pan', $request->panCard);
    }

    if ($request->address_proof) {
      $reqData['address_proof'] = $this->uploadOnS3('address_proof', $request->address_proof);
    }

    if ($request->profile_image) {
      $reqData['image'] = $this->uploadOnS3('profile_image', $request->profile_image);
    }
    if ($request->paypal) {
      $reqData['paypal'] = $request->paypal;
    }
    //  dd($reqData);

    if (Auth::user()->update($reqData)) {
      return ['status' => 1, "message" => "Profile update successfully!"];
    } else return ['status' => 0, "message" => "Somthing went wrong"];
  }

  private function uploadOnS3($folder, $file)
  {
    $s = Storage::disk('s3')->put('workolics/' . $folder, $file);
    $ex = explode('/', $s);
    return  end($ex);
  }

  public function myOrder()
  {
    $orders = Projects::where(['freelancer_id' => Auth::user()->id])->whereNotIn('status', ['Disable', 'RTA'])->get();
    $pageData = new \stdClass();
    $pageData->title = 'Orders';
    return view('dashboard/myOrder', compact('orders', 'pageData'));
  }
  public function message()
  {
    // dd('pradeep');
    $test = 'ram';
    return view('dashboard/message', compact('test'));
  }
  public function notification()
  {
    
    // $feedback =(DB::select('SELECT * FROM `feedbacks` WHERE `status`=1 GROUP BY `project_id` ORDER BY `submitted_date` DESC'));
    // $feedback = (Feedbacks::select('*')->with('project')->with((['project' => function ($q) {
    //   return ($q->where(['status' => 'Feedback']));
    // }]))->where(['status' => 1])->groupBy('project_id')->orderBy('submitted_date', 'Desc')->whereHas('project')->get());
    // dd($feedback);
    // return $feedback;
    $pageData = new \stdClass();
    $pageData->title = 'Notification';
    return view('dashboard/notification', compact('pageData'));
  }
  public function wallet()
  {
    // dd('pradeep');
    $test = 'ram';
    $pageData = new \stdClass();
    $pageData->title = 'Wallet';
    return view('dashboard/wallet', compact('test','pageData'));
  }
}
