<?php

namespace App\Http\Controllers;

use App\Feedback;
use App\Homestay;
use App\ListBook;
use App\Room;
use App\Transaksi;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\User;
use App\Customer;
use Illuminate\Support\Facades\DB;
use Illuminate\Contracts\Auth\Guard;
use DateTime;
use PhpParser\Node\Stmt\Const_;
use Psy\Command\ListCommand\ConstantEnumerator;
use Illuminate\Notifications\Messages\NexmoMessage;
use SimpleSoftwareIO\SMS\Drivers\NexmoSMS;
use Nexmo\Laravel\Facade\Nexmo;


class CustomerController extends Controller
{

    public function __construct(){
        //$this->middleware('auth');
        $this->middleware('customer');
    }

    public function cancelPemesanan($id){

        $dataTrsaksi = Transaksi::find($id);

        $dataTrsaksi->delete();

        DB::table('daftar_book')->where('id_transaksi', '=', $id)->delete();


        return redirect('customerHistory');
    }

    public function sendFeedback(Request $request, $id){
        if(Auth::guest()){
            dd("maaf nggak bisa banf");
        }

        $dataPelanggan = DB::table('pelanggan')
                         ->select('pelanggan.id')
                         ->where('pelanggan.id_Akun','=',Auth::user()->id)
                         ->get();

        $dataPemilik = DB::table('homestay')
                       ->select('homestay.idPemilik')
                       ->where('homestay.id','=',$id)
                       ->get();

        //dd($dataPelanggan,$dataPemilik);

        $feed = new Feedback();
        $feed->id_pemilikHomestay = $dataPemilik[0]->idPemilik;
        $feed->idPelanggan = $dataPelanggan[0]->id;
        $feed->feedback = $request['feedback'];

        $feed->save();
        return redirect()->action('CustomerController@detailhomestay', ['id' => $id]);
        //return redirect('detailhomestay/{id}',$id);
    }


    public function upload(Request $request,$id)
    {
        //dd("masuk agan");

        $data = Transaksi::find($id);

        if($request->file('bukti_pembayaran')==null){
            $data->bukti_pembayaran = $data->bukti_pembayaran;
        }else{
            $file = $request->file('bukti_pembayaran');
            $fileName = $file->getClientOriginalName();
            $request->file('bukti_pembayaran')->move("img/",$fileName);
            $data->bukti_pembayaran = $fileName;
        }

        //$cus->update();
        $data->update();

        return redirect('customerHistory');
    }


    public function bukti($id){
        $data = Transaksi::find($id);

        return view('adminlte::layouts.customers.Upload')->with('data',$data);
    }

    public function history(){

        $data = DB::table('pelanggan')
            ->select('pelanggan.*')
            ->where('pelanggan.id_Akun','=',Auth::user()->id)
            ->get();


       $dataTrans = DB::table('homestay')
                    ->join('transaksi','homestay.id','=','transaksi.id_homestay')
                    ->join('pemilikhomestay','homestay.idPemilik','=','pemilikhomestay.id')
                    ->select('transaksi.*','pemilikhomestay.nama','pemilikhomestay.noRekening')
                    ->where('transaksi.id_pelanggan','=',$data[0]->id)
                    ->get();



//        dd($dataTrans);
        return view('adminlte::layouts.customers.History')->with('data',$dataTrans);
    }

    public function profile(){
        //dd("masuk agan");
       //dd(Auth::user()->id);

        $data = DB::table('pelanggan')
            ->select('pelanggan.*')
            ->where('pelanggan.id_Akun','=',Auth::user()->id)
            ->get();
        //$data2 = User::find(Auth::user()->id);
        //dd($data[0]);

        return view('adminlte::layouts.customers.profiles')->with('data',$data[0]);
    }

    public function registerStore(Request $data){
        $user = new User();
        $user->name  = $data['name'];
        $user->username = $data['username'];
        $user->email = $data['email'];
        $user->password = bcrypt($data['password']);
        $user->role = "Customer";
        $user->foto = "gravatar.png";

        $user->save();
        $dataPel = DB::table('users')
            ->select('users.id')
            ->where('users.username','=',$data['username'])
            ->get();

        $cus = new Customer();
        $cus->id_Akun = $dataPel[0]->id;
        $cus->nama = $data['name'] ;
        $cus->alamat = "---";
        $cus->noTelepon = "---";
        $cus->pekerjaan = "---";

        $cus->save();

        //$this->guard()->login($user);

        return redirect('login');

    }

    public function editProfile($id){
        $data = Customer::find($id);
        //dd($data);
        return view('adminlte::layouts.customers.editprofiles')->with('data',$data);
    }

    public function updateProfile(Request $request,$id){
        $cus = Customer::find($id);
        $dataUs = User::find(Auth::user()->id);
        if($request['nama']==""){
            $cus->nama = $cus->nama;
            $dataUs->name = $dataUs->name;
        }else{
            $cus->nama = $request['nama'];
            $dataUs->name=$request['nama'];
        }

        $cus->alamat = $request['alamat'];
        $cus->pekerjaan = $request['pekerjaan'];
        $cus->noTelepon = $request['noTelepon'];

        if($request->file('foto')==null){
            $dataUs->foto = $dataUs->foto;
        }else{
            $file = $request->file('foto');
            $fileName = $file->getClientOriginalName();
            $request->file('foto')->move("img/",$fileName);
            $dataUs->foto = $fileName;
        }

        $cus->update();
        $dataUs->update();

        return redirect('customerProfile');
    }

    public function booking(Request $request){
        $this->validate($request,[
            'tanggal' => 'required',
            'jumlah_hari' => 'required|numeric',
            'jumlah_kamar' => 'required|numeric',

        ],[
            'tanggal.required' => 'Tanggal Harus di isi',
            'jumlah_kamar.required' => ' Jumlah Kamar Harus di isi',
            'jumlah_kamar.numeric' => ' Jumlah Kamr harus berupa Angka',
            'jumlah_hari.required' => ' Lama menginap harus Diisi',
            'jumlah_hari.numeric' => ' Lama menginap harus berupa Angka',
        ]);

        if(Auth::guest()){
            return view('adminlte::errors.Account');
        }

        $lb = new ListBook();

        $dataHomestay = DB::table('homestay')
            ->join('kamar','homestay.id','=','kamar.idHomestay')
            ->select('kamar.*','homestay.harga','homestay.jumlahKamar')
            ->where('homestay.id','=',$request['id'])
            ->get();

        $dataPemilik = DB::table('homestay')
            ->join('pemilikhomestay','homestay.idPemilik','pemilikhomestay.id')
            ->select('pemilikhomestay.noTelepon')
            ->where('homestay.id','=',$request['id'])
            ->get();

        //dd("masuk dis ");

        $homestayJumlahKamar = DB::table('homestay')->select('homestay.jumlahKamar')->where('homestay.id','=',$request['id'])->get();

        $dataBookingMulai = DB::table('daftar_book')
                       ->select('daftar_book.*')
                       ->where('daftar_book.tanggal_mulai','=',$request['tanggal'])
                       ->get();
        $dataBookingBerakhir = DB::table('daftar_book')
            ->select('daftar_book.*')
            ->where('daftar_book.tanggal_berakhir','=',$request['tanggal'])
            ->get();

        if($dataBookingMulai->count() > 0){
            $currentJumlahKamar = $homestayJumlahKamar[0]->jumlahKamar - $dataBookingMulai[0]->jumlah_kamar;

            if($currentJumlahKamar >= $request['jumlah_kamar']){

                dd("masuk gan" ,$request['jumlah_kamar'],$request['tanggal']);
            }else{
                dd("nggak boleh");
            }

        }else{
            if($dataBookingBerakhir->count() > 0){
                $currentJumlahKamar2 = $homestayJumlahKamar[0]->jumlahKamar - $dataBookingBerakhir[0]->jumlah_kamar;
                if($currentJumlahKamar2 >= $request['jumlah_kamar']){
                    dd('boleh aja agan');
                }else{
                    dd('nggak boleh');
                }
            }else{
                //dd('masuk aja gan');
            }
        }



        //dd('dataBooking',$dataBooking,'dataHomestay',$dataHomestay);

        $dataPelanggan = DB::table('users')
            ->join('pelanggan','users.id','=','pelanggan.id_Akun')
            ->select('pelanggan.id','pelanggan.nama')
            ->where('users.id','=',Auth::user()->id)
            ->get();

        //dd($dataHomestay,$dataPelanggan);
        $time = explode('-', $request['tanggal']);
        //dd($time[1]+2);
        if ($time[1]==2){
            $time[2] += $request['jumlah_hari'];
            if ($time[2]>28){
                $time[2] = 0;
                $time[2] += $request['jumlah_hari'];
                $time[2] -=1;
                $time[1] +=1;
                if($time[1]>12){
                    $time[1] = 1;
                }
            }
        }else{
            if($time[1]%2==1){
                $time[2] += $request['jumlah_hari'];
                if($time[2]>31){
                    $time[2] = 0;
                    $time[2] += $request['jumlah_hari'];
                    $time[1] +=1;
                }
                $time[2] -=1;
            }else{
                $time[2] += $request['jumlah_hari'];
                if($time[2]>30){
                    $time[2] = 0;
                    $time[2] += $request['jumlah_hari'];
                    $time[1] +=1;
                }
                $time[2] -=1;
            }
        }


        $baru = join('-',$time);
        //dd($request['tanggal'],$baru,$request['jumlah_hari']);

        //Insert Table Transaksi
        $trans = new Transaksi();
        $trans->id_pelanggan  = $dataPelanggan[0]->id;
        $trans->id_homestay = $request['id'];
        $trans->tanggal_mulai = $request['tanggal'];
        $trans->tanggal_berakhir = $baru;
        $trans->jumlah_kamar =$request['jumlah_kamar'];
        $trans->lama_menginap = $request['jumlah_hari'];
        $trans->total_pembayaran = $request['jumlah_kamar'] * $dataHomestay[0]->harga;
        $trans->status = 0;

        $trans->save();

        $dataTrans = DB::table('transaksi')
                     ->select('transaksi.id')
                     ->where('transaksi.tanggal_mulai','=',$request['tanggal'])
                     ->where('transaksi.tanggal_berakhir','=',$baru)
                     ->get();
		
		
		
        //Insert Table Daftar Booking
        $lb->homestay = $request['id'];
        $lb->id_transaksi = $dataTrans[0]->id;
        $lb->nama_pemesan = $dataPelanggan[0]->nama;
        $lb->jumlah_kamar = $request['jumlah_kamar'];
        $lb->tanggal_mulai = $request['tanggal'] ;
        $lb->tanggal_berakhir = $baru;

        //Save

        $lb->save();

        Nexmo::message()->send([
            'to' => $dataPemilik[0]->noTelepon,
            'from' => 'ASDASD',
            'text' => 'Hi ini hanya sebuah test no more'
        ]);


        return redirect()->action('CobaController@detailhomestay', ['id' => $request['id']]);

    }


}