<?php

namespace App\Http\Controllers;

use App\Homestay;
use App\ListBook;
use App\RequestFasilitas;
use App\RequestHomestay;
use App\Room;
use App\Transaksi;
use Illuminate\Http\Request;
use App\User;
use App\Owner;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\View;
use PDF;

class OwnerController extends Controller
{

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


    public function pesanan($id){
      $dataTrans = DB::table('transaksi')
          ->join('pelanggan','transaksi.id_pelanggan','=','pelanggan.id')
          ->join('homestay','transaksi.id_homestay','=','homestay.id')
          ->select('transaksi.*','pelanggan.nama','pelanggan.no_telepon','homestay.nama_homestay','homestay.alamat')
          ->where('transaksi.id','=',$id)
          ->get();

          $pdf = PDF::loadView('pdf.detailpesanan',['data' => $dataTrans[0]]);
          return $pdf->stream('detailpesanan.pdf');
    }

    public function detailpesanan($id){

      //dd($id);

      $dataTrans = DB::table('transaksi')
          ->join('pelanggan','transaksi.id_pelanggan','=','pelanggan.id')
          ->select('transaksi.total_pembayaran','transaksi.bukti_pembayaran','transaksi.tanggal_mulai','transaksi.id','transaksi.tanggal_berakhir','transaksi.jumlah_kamar','transaksi.lama_menginap','pelanggan.nama','pelanggan.no_telepon')
          ->where('transaksi.id','=',$id)
          ->get();

    //dd($dataTrans);
      return view('adminlte::layouts.owner.detailpesanan')->with('data',$dataTrans[0]);
    }


    public function index()
    {
      $dataPemilik = DB::table('pemilikhomestay')
          ->select('pemilikhomestay.id')
          ->where('pemilikhomestay.id_akun','=',Auth::user()->id)
          ->get();


      $dataHomestay = DB::table('homestay')
                      ->join('pemilikhomestay','homestay.id_pemilik','pemilikhomestay.id')
                      ->select('homestay.id')
                      ->where('pemilikhomestay.id','=',$dataPemilik[0]->id)
                      ->get();

      $dataListOfBook = DB::table('daftar_book')
                        ->select('daftar_book.*')
                        ->where('daftar_book.homestay','=',$dataHomestay[0]->id)
                        ->get();

      $dataFeedback = DB::table('feedback')
                      ->join('pelanggan','feedback.id_pelanggan','pelanggan.id')
                      ->select('feedback.*','pelanggan.nama')
                      ->where('feedback.id_pemilik_homestay','=',$dataPemilik[0]->id)
                      ->get();

      $datakamar = DB::table('homestay')
              ->join('pemilikhomestay','homestay.id_pemilik','pemilikhomestay.id')
              ->join('kamar','homestay.id','=','kamar.id_homestay')
              ->select('kamar.*')
              ->where('pemilikhomestay.id','=',$dataPemilik[0]->id)
              ->get();


          return view('adminlte::layouts.owner.home')->with('dataF',$dataFeedback)->with('countF',$dataFeedback->count())->with('dataB',$dataListOfBook)->with('countB',$dataListOfBook->count())->with('dataK',$datakamar)->with('countK',$datakamar->count());
      //  return view('adminlte::layouts.owner.listPesanan')->with('count',$data->count())->with('count1',$dataListOfBook->count())->with('count2',$dataFeedback->count())->with('dataF',$dataFeedback);
    }

    public function Checkout($id){
        $dataPesanan = ListBook::find($id);

        $dataPesanan->status = 0;

        $dataPesanan->update();

        return redirect('daftarBooking');

    }


    //Menyimpan Data untuk di update
    public function updateProfil(Request $request,$id){
        $owner = Owner::where('id',$id)->first();
        $user = User::where('name',$owner->nama)->first();
        //dd($owner->id_akun);
        if($request['nama']==""){
            $user->name = $owner->nama;
        }else{
            $user->name = $request['nama'];
        }

        $owner->nama = $request['nama'];
        $owner->alamat = $request['alamat'];
        $owner->pekerjaan = $request['pekerjaan'];
        $owner->no_telepon = $request['noTelepon'];
        $owner->no_rekening = $request['noRekening'];

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

        $user->update();
        $owner->update();

        return redirect('profile');
    }


    //Mengakses Halaman untuk Melakukan edit Profile
    public function profileEdit($id){
        $data = Owner::find($id);

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


    //Mengakses Halaman profile
    public function profile(){

        $users = User::find(Auth::user()->id);
        $data = DB::table('pemilikhomestay')->where('nama', $users->name)->first();

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


    //Mengakses Halaman daftar Feedback
    public function feddback(){
        $dataPemilik = DB::table('pemilikhomestay')
            ->select('pemilikhomestay.id')
            ->where('pemilikhomestay.id_akun','=',Auth::user()->id)
            ->get();

        $dataFeedback = DB::table('feedback')
                        ->join('pelanggan','feedback.id_pelanggan','pelanggan.id')
                        ->select('feedback.*','pelanggan.nama')
                        ->where('feedback.id_pemilik_homestay','=',$dataPemilik[0]->id)
                        ->paginate(5);

        return view('adminlte::layouts.owner.listfeedback')->with('data',$dataFeedback);
    }


    //Menyimpan Data Update Homestay
    public function updateHomestay(Request $request,$id){
        $this->validate($request,[
            'namaUpdate' => 'required|string',
            'alamatUpdate' => 'required|string',
            'hargaUpdate' => 'required|numeric',
        ],[
            'namaUpdate.required' => ' Nama Homestay Harus di isi',
            'alamatUpdate.required' => 'Alamat Harus Diisi',
            'hargaUpdate.required' => ' Harga Harus di isi',
            'hargaUpdate.numeric' => ' Harga Harus Berupa Angka',
        ]);


        $updateHomestay = Homestay::find($id);

        $updateHomestay->nama_homestay = $request['namaUpdate'];
        $updateHomestay->alamat = $request['alamatUpdate'];
        $updateHomestay->harga = $request['hargaUpdate'];



        if ($updateHomestay->fasilitas == null){
            $updateHomestay->fasilitas = $request['fasilitasUpdate'];
        }else{
            $updateHomestay->fasilitas = $request['fasilitasUpdate'];
        }

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

        $updateHomestay->update();

        return redirect('updateHomestay');
    }


    //Mengakses Halaman Update Homestay
    public function update(){
        $dataPemilik = DB::table('pemilikhomestay')
                       ->select('pemilikhomestay.id')
                       ->where('pemilikhomestay.id_akun','=',Auth::user()->id)
                       ->get();

        $dataHomestay = DB::table('homestay')
                        ->select('homestay.*')
                        ->where('homestay.id_pemilik','=',$dataPemilik[0]->id)
                        ->get();
        //dd($dataHomestay[0]);
        return view('adminlte::layouts.owner.UpdateHomestay')->with('data',$dataHomestay[0]);
    }

    //Melakukan Konfirmasi Pemesanan
    public function konfirmasiPemesanan(Request $request,$id){

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

        if($request['konfirmasi']==1){
            $data->status = $request['konfirmasi'];
        }else{
            DB::table('daftar_book')->where('tanggal_mulai', '=', $data->tanggal_mulai)->delete();

            $data->status=$request['konfirmasi'];
        }

        $data->update();

        return redirect('pesanan');
    }

    //Mengakses Daftar Booking Homestay
    public function listOfBook(){
        $dataPemilik = DB::table('pemilikhomestay')
            ->select('pemilikhomestay.id')
            ->where('pemilikhomestay.id_akun','=',Auth::user()->id)
            ->get();


        $dataHomestay = DB::table('homestay')
                        ->join('pemilikhomestay','homestay.id_pemilik','pemilikhomestay.id')
                        ->select('homestay.id')
                        ->where('pemilikhomestay.id','=',$dataPemilik[0]->id)
                        ->get();

        $dataListOfBook = DB::table('daftar_book')
                          ->select('daftar_book.*')
                          ->where('daftar_book.homestay','=',$dataHomestay[0]->id)
                          ->get();

        return view('adminlte::layouts.owner.ListBooking')->with('data',$dataListOfBook)->with('count',$dataListOfBook->count());
    }

    //Melakukan Penambahan Boking secara Manual
    public function addBookManual(Request $request){

        $lb = new ListBook();

        $this->validate($request,[
            'nama' => 'required|string',
            'jumlah_kamar' => 'required|numeric',
            'tanggal_mulai' => 'required',
            'lama_menginap' => 'required|numeric',

        ],[
            'nama.required' => 'Nama Harus di isi',
            'jumlah_kamar.required' => ' Jumlah Kamar Harus di isi',
            'jumlah_kamar.numeric' => ' Jumlah Bed harus berupa Angka',
            'tanggal_mulai.required' => ' Jumlah Bed harus Diis',
            'lama_menginap.required' => ' Lama menginap harus Diisi',
            'lama_menginap.numeric' => ' Lama menginap harus berupa Angka',
        ]);

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

        $dataHomestay = DB::table('homestay')
                        ->join('pemilikhomestay','homestay.id_pemilik','pemilikhomestay.id')
                        ->select('homestay.id','homestay.jumlah_kamar')
                        ->where('homestay.id_pemilik','=',$dataPemilik[0]->id)
                        ->get();

        if($dataHomestay[0]->jumlah_kamar < $request['jumlah_kamar']){
            return redirect('AddBook')->with('message','Maaf jumlah kamar tidak mencukupi');
        }else{
            $lb->homestay = $dataHomestay[0]->id;
            $lb->nama_pemesan = $request['nama'];
            $lb->jumlah_kamar = $request['jumlah_kamar'];
            $lb->tanggal_mulai = $request['tanggal_mulai'];
            $time = explode('-', $request['tanggal_mulai']);
            $time[2] +=$request['jumlah_hari'];
            $baru = join('-',$time);
            $lb->tanggal_berakhir = $baru;

            $lb->save();

            return redirect('daftarBooking');
        }
    }

    //Melakukan Update Kamar
    public function updateRoom(Request $request, $id){
        $this->validate($request,[
            'jumlah_bed' => 'required|numeric',
        ],[
            'jumlah_bed.required' => ' Jumlah Bed Harus di isi',
            'jumlah_bed.numeric' => ' Jumlah Bed harus berupa Angka',
        ]);

        $dataKamar = Room::find($id);

        $dataKamar->jumlah_bed = $request['jumlah_bed'];
        $dataKamar->fasilitas = $request['fasilitas'];

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

        $dataKamar->update();

        return redirect('daftarKamar')->with('message', 'Update Kamar Sukses!');
    }

    //Mengakses Halaman Edit Room
    public function editRoom($id){
        $dataKamar = Room::find($id);

        return view('adminlte::layouts.owner.EditRoom')->with('data',$dataKamar);
    }

    //Mengakses Halaman Daftar Kamar
    public function daftarKamar(){

        $dataPemilik = DB::table('pemilikhomestay')
                ->select('pemilikhomestay.*')
                ->where('pemilikhomestay.id_akun','=',Auth::user()->id)
                ->get();

        $data = DB::table('homestay')
                ->join('pemilikhomestay','homestay.id_pemilik','pemilikhomestay.id')
                ->join('kamar','homestay.id','=','kamar.id_homestay')
                ->select('kamar.*')
                ->where('pemilikhomestay.id','=',$dataPemilik[0]->id)
                ->get();

        return view('adminlte::layouts.owner.listRoom')->with('data',$data)->with('count',$data->count());
    }

    //Mengakses Halaman Daftar Transaksi
    public function listTransaction(){

        $dataPel = DB::table('pemilikhomestay')
            ->select('pemilikhomestay.*')
            ->where('pemilikhomestay.id_akun','=',Auth::user()->id)
            ->get();

        $data  = DB::table('homestay')
                ->join('pemilikhomestay','homestay.id_pemilik','=','pemilikhomestay.id')
                ->join('transaksi','homestay.id','=','transaksi.id_homestay')
                ->join('pelanggan','transaksi.id_pelanggan','=','pelanggan.id')
                ->select('transaksi.*','pelanggan.nama','pelanggan.alamat','pelanggan.no_telepon')
                ->where('homestay.id_pemilik','=',$dataPel[0]->id)
                ->orderBy('transaksi.id','desc')
                ->paginate(5);

        return view('adminlte::layouts.owner.listPesanan')->with('data',$data)->with('count',$data->count());
    }


    //Mengakses Halaman untuk melakukan Request Fasilitas
    public function requestFasilitas(){
        return view('adminlte::layouts.owner.RequestFasilitas')->with('message', 'Request Fasilitas Berhasil Dikirim!');
    }


    //Menyimpan Data Request Fasilitas
    public function storeRequest(Request $request){
        $this->validate($request,[
            'namaRequestFasilitas' => 'required|string',
            'deskripsi' => 'required|string',
            'jumlah' => 'required|numeric',
        ],[
            'namaRequestFasilitas.required' => ' Nama Fasilitas Harus di isi',
            'deskripsi.required' => 'Deskripsi Harus Diisi',
            'jumlah.required' => ' Jumlah Harus di isi',
            'jumlah.numeric' => ' Harus Angka',
        ]);

        $idPemilik = DB::table('users')
                    ->join('pemilikhomestay','users.id','=','pemilikhomestay.id_akun')
                    ->select('pemilikhomestay.id')
                    ->where('users.id', '=', Auth::user()->id)
                    ->get();

        //dd($request['namaRequestFasilitas']);

        $data = new RequestFasilitas();

        $data->id_pemilik_homestay = $idPemilik[0]->id;
        $data->id_kategori_fasiltas = $request['id_kategoriFasiltas'];
        $data->nama_request_fasilitas = $request['namaRequestFasilitas'];
        $data->deskripsi = $request['deskripsi'];
        $data->jumlah = $request['jumlah'];

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

        $data->save();

        return redirect('listPengajuanFasilitas')->with('message', 'Permintaan Fasilitas Telah Dikirim');

    }


    //Mengakses Halaman untuk melakukan Pengajuan
    public function pengajuan(){
        return view('adminlte::layouts.owner.PengajuanHomestay');
    }


    //Menyimpan Data Pengajuan
    public function storePengajuan(Request $request){

        $this->validate($request,[
            'namaHomestay' => 'required',
            'jumlahKamar' => 'required|numeric',
        ],[
            'namaHomestay.required' => ' Nama Homestay Harus Diisi Harus di isi',
            'jumlahKamar.required' => ' Jumlah Kamar harus di isi.',
            'jumlahKamar.numeric' => ' Jumlah Kamar Harus Berupa angka',
        ]);

        $idPemilik = DB::table('users')
            ->join('pemilikhomestay','users.id','=','pemilikhomestay.id_akun')
            ->select('pemilikhomestay.id')
            ->where('users.id', '=', Auth::user()->id)
            ->get();

        $data = new RequestHomestay();

        $data->id_pemilik_homestay  = $idPemilik[0]->id;
        $data->nama_homestay = $request['namaHomestay'];
        $data->jumlah_kamar = $request['jumlahKamar'];
        $data->status = 0;

        $data->save();

        return redirect('listPengajuan');
    }


    //Melihat Daftar Pengajuan Homestay
    public function listPengajuan(){

        $idPemilik = DB::table('users')
            ->join('pemilikhomestay','users.id','=','pemilikhomestay.id_akun')
            ->select('pemilikhomestay.id')
            ->where('users.id', '=', Auth::user()->id)
            ->get();
        //dd($idPemilik,Auth::user()->id);
        $data = DB::table('pengajuan_homestay')
                ->join('pemilikhomestay','pengajuan_homestay.id_pemilik_homestay','=','pemilikhomestay.id')
                ->select('pemilikhomestay.nama','pengajuan_homestay.*')
                ->where('pengajuan_homestay.id_pemilik_homestay','=',$idPemilik[0]->id)
                ->orderBy('pengajuan_homestay.id','desc')
                ->get();
        //dd('masuk');
        $count = $data->count();

        return view('adminlte::layouts.owner.ListPengajuanHomestay')->with('data',$data)->with('count',$count);
    }


    //Melihat Daftar Pengajuan Fasilitas
    public function listPengajuanFasilitas(){
        $idPemilik = DB::table('users')
            ->join('pemilikhomestay','users.id','=','pemilikhomestay.id_akun')
            ->select('pemilikhomestay.id')
            ->where('users.id', '=', Auth::user()->id)
            ->get();

        $data = DB::table('requestfasilitas')
            ->join('pemilikhomestay','requestfasilitas.id_pemilik_homestay','=','pemilikhomestay.id')
            ->select('pemilikhomestay.nama','requestfasilitas.*')
            ->where('requestfasilitas.id_pemilik_homestay','=',$idPemilik[0]->id)
            ->orderBy('requestfasilitas.id','desc')
            ->paginate(4);

        $count = $data->count();


        return view('adminlte::layouts.owner.ListPengajuanFasilitas')->with('data',$data)->with('count',$count);
    }

}