<?php

namespace App\Http\Controllers\Backend;

use App\Components\Functions;
use App\Models\Blog;
use App\Models\Category;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Yajra\Datatables\Datatables;
use Illuminate\Support\Facades\Validator;

class BlogController extends BaseController {
	//
	public function getBlogByAttributeView() {
		return view( 'admin.blog.index' );
	}

	public function getBlogByAttribute() {
		$items = Blog::query();

		return Datatables::of( $items )
		                 ->filterColumn('account', function($q, $keyword) {
		                 	$q->whereHas('account', function($q) use ($keyword) {
		                 		$q->where('name', 'LIKE', '%'.$keyword.'%');
		                    });
		                 })
		                 ->editColumn( 'image', function ( $item ) {
			return $item->image_text;
		} )->editColumn( 'status', function ( $item ) {
			return $item->status_text;
		} )->editColumn( 'account', function ( $item ) {
			if ( $item->account ) {
				return $item->account->name;
			}
		} )->editColumn( 'created_at', function ( $item ) {
			return $item->created_at->format( 'd/m/Y H:i' );
		} )->editColumn( 'updated_at', function ( $item ) {
			return $item->updated_at->format( 'd/m/Y H:i' );
		} )->addColumn( 'action', function ( $item ) {
			$action = '';
			if ( auth( 'backend' )->user()->can( 'admin-edit-blog' ) ) {
				$action .= '<a href="' . url( 'admin/blog/edit', [ 'id' => $item->id ] ) . '" class="btn btn-sm green btn-outline "> Sửa</a>';
			}
			if ( auth( 'backend' )->user()->can( 'admin-delete-blog' ) ) {
				$action .= '<a href="' . url( 'admin/blog/delete', [ 'id' => $item->id ] ) . '" class="btn btn-sm red btn-outline delete-btn"> Xóa</a><br><br>';
			}

			return $action;


		} )->make( true );
	}

	public function create() {
		return view( 'admin.blog.create' );

	}

	public function update( $id ) {
		$blog = Blog::find( $id );
		if ( $blog ) {
			$categories         = Category::orderBy( 'id', 'desc' )->get();
			$selectedCategories = \DB::table( 'blog_categories' )->where( 'blog_id', $blog->id )->pluck( 'category_id' )->toArray();

			return view( 'admin.blog.edit', compact( 'blog', 'categories', 'selectedCategories' ) );
		}

		return redirect()->back()->with( 'error', 'Dữ liệu không hợp lệ' );
	}

	public function store( Request $request ) {
		$data = $request->all();
        $validator = Validator::make($request->all(), [
            'slug' => 'required|unique:blogs',
        ], ['slug.unique' => 'Tên slug không được trùng']);

        if ($validator->fails()) {
            return back()
                ->withErrors($validator)
                ->withInput();
        }

		if ( $request->file( 'image' ) && $request->file( 'image' )->isValid() ) {
			$data['image'] = Functions::uploadImage( $request->file( 'image' ) );
		}

		if ( isset( $data['is_featured'] ) && $data['is_featured'] == 'on' ) {
			$data['is_featured'] = true;
		} else {
			$data['is_featured'] = false;
		}

		if ( isset( $data['status'] ) && $data['status'] == 'on' ) {
			$data['status'] = true;
		} else {
			$data['status'] = false;
		}

		if (empty($request->get('meta_title'))) {
            $data['meta_title'] = $data['title'];
        }

		$categories = $request->input( 'categories' );

		$data['user_id'] = auth( 'backend' )->user()->id;

		if ( ! empty( $data['start_date'] ) ) {
			$data['start_date'] = Carbon::createFromFormat( 'd/m/Y', $data['start_date'] )->toDateString();
		}
		if ( ! empty( $data['end_date'] ) ) {
			$data['end_date'] = Carbon::createFromFormat( 'd/m/Y', $data['end_date'] )->toDateString();
		}

		$blog = Blog::create( $data );

		if ( ! empty( $categories ) ) {
			\DB::table( 'blog_categories' )->where( 'blog_id', $blog->id )->delete();

			foreach ( $categories as $category ) {

				$check = Category::where( 'parent_id', $category )->pluck( 'id' )->toArray();

				$c = false;
				foreach ( $check as $item ) {
					if ( in_array( $item, $categories ) ) {
						$c = true;
						break;
					}
				}

				if ( $c ) {
					continue;
				}

				\DB::table( 'blog_categories' )->insert( [
					'blog_id'     => $blog->id,
					'category_id' => $category,
					'created_at'  => Carbon::now()->toDateTimeString(),
					'updated_at'  => Carbon::now()->toDateTimeString(),
				] );
			}
		}

//        if ($blog->status == true) {
//            $html = view('frontend3.mail.newsletter', [
//                'post' => $blog
//            ])->render();
//            $return = \Newsletter::createCampaign('iTro.vn', 'contact@itro.vn', $blog->title, $html);
//            $id = $return['id'];
//            $api = \Newsletter::getApi();
//            $api->post('campaigns/' . $id . '/actions/send');
//            $blog->is_sent = true;
//            $blog->save();
//        }
		return redirect()->back()->with( 'success', 'Thêm thành công' );
	}

	public function delete( $id ) {
		$blog = Blog::find( $id );
		if ( $blog ) {
			$blog->delete();
		}

		return redirect()->back()->with( 'success', 'Xóa thành công' );
	}

	public function edit( $id, Request $request ) {
		$data = $request->all();

        $validator = Validator::make($request->all(), [
            'slug' => 'required|unique:blogs,id,' .$id ,
        ], ['slug.unique' => 'Tên slug không được trùng']);

        if ($validator->fails()) {
            return back()
                ->withErrors($validator)
                ->withInput();
        }

		if ( $request->file( 'image' ) && $request->file( 'image' )->isValid() ) {
			$data['image'] = Functions::uploadImage( $request->file( 'image' ) );
		}

		if ( isset( $data['is_featured'] ) && $data['is_featured'] == 'on' ) {
			$data['is_featured'] = true;
		} else {
			$data['is_featured'] = false;
		}

		if ( isset( $data['status'] ) && $data['status'] == 'on' ) {
			$data['status'] = true;
		} else {
			$data['status'] = false;
		}

		if ( isset( $data['is_sale'] ) && $data['is_sale'] == 'on' ) {
			$data['is_sale'] = true;
		} else {
			$data['is_sale'] = false;
		}

		if ( ! empty( $data['start_date'] ) ) {
			$data['start_date'] = Carbon::createFromFormat( 'd/m/Y', $data['start_date'] )->toDateString();
		}
		if ( ! empty( $data['end_date'] ) ) {
			$data['end_date'] = Carbon::createFromFormat( 'd/m/Y', $data['end_date'] )->toDateString();
		}

        if (empty($request->get('meta_title'))) {
            $data['meta_title'] = $data['title'];
        }

		$categories = $request->input( 'categories' );

		$data['user_id'] = auth( 'backend' )->user()->id;
		$blog            = Blog::find( $id );

		if ( ! $blog ) {
			return redirect()->back()->with( 'error', 'Dữ liệu không hợp lệ' );
		}

		if ( ! empty( $categories ) ) {
			\DB::table( 'blog_categories' )->where( 'blog_id', $blog->id )->delete();

			foreach ( $categories as $category ) {

				$check = Category::where( 'parent_id', $category )->pluck( 'id' )->toArray();

				$c = false;
				foreach ( $check as $item ) {
					if ( in_array( $item, $categories ) ) {
						$c = true;
						break;
					}
				}

				if ( $c ) {
					continue;
				}

				\DB::table( 'blog_categories' )->insert( [
					'blog_id'     => $blog->id,
					'category_id' => $category,
					'created_at'  => Carbon::now()->toDateTimeString(),
					'updated_at'  => Carbon::now()->toDateTimeString(),
				] );
			}
		}
		$blog->update( $data );

//        if ($blog->status == true) {
//            if(!$blog->is_sent) {
//                $html = view('frontend3.mail.newsletter', [
//                    'post' => $blog
//                ])->render();
//                $return = \Newsletter::createCampaign('iTro.vn', 'contact@itro.vn', $blog->title, $html);
//                $id = $return['id'];
//                $api = \Newsletter::getApi();
//                $api->post('campaigns/' . $id . '/actions/send');
//                $blog->is_sent = true;
//                $blog->save();
//            }
//        }

		return redirect()->back()->with( 'success', 'Cập nhật thành công' );
	}
}
