<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\CarWashOwner;
use App\Models\User;
use App\Models\CwoSubscription;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
use Config;
use Hash;
use Auth;

class CwoController extends Controller
{
    public function __construct(){
    }


    public function index(){
    }

    public function register(Request $request){
        $validate = Validator::make($request->all(), 
            [
                'cwo_name' => 'required',
                'cwo_company' => 'required',
                'cwo_email' => 'required|email|unique:cwo_master,cwo_email',
                'cwo_phone' => 'required',
                'address_line_1' => 'required',
                // 'user_name' => 'required',
                'password' => [
                    'required',
                    // 'string',
                    // 'min:8',             // must be at least 8 characters in length
                    // 'regex:/[a-z]/',      // must contain at least one lowercase letter
                    // 'regex:/[A-Z]/',      // must contain at least one uppercase letter
                    // 'regex:/[0-9]/',      // must contain at least one digit
                    // 'regex:/[!@#$%^&*()]/', // must contain a special character
                ],
            ],[
                'cwo_email.unique' => 'This email already exists.'
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                // 'message' => $validate->errors(),
                'message' => $errorString,
            ]);
        }

        $cwo_name = $request->input('cwo_name');
        $cwo_company = $request->input('cwo_company');
        $cwo_business_details = $request->input('cwo_business_details');
        $cwo_email = $request->input('cwo_email');
        $allow_prebooking = $request->input('allow_prebooking');
        $password = Hash::make($request->input('password'));
        $cwo_phone = $request->input('cwo_phone');
        $address_line_1 = $request->input('address_line_1');
        $address_line_2 = $request->input('address_line_2');
        // $user_name = $request->input('user_name');
        $user_name = $request->input('cwo_name');
        $subscription_detail_id = $request->input('subscription_detail_id');
        $subscription_type = $request->input('subscription_type');
        $amount = $request->input('amount');
        $dt = Carbon::now(); 

        $cwo_logo = '';
        if ($request->hasFile('cwo_logo')) {
            $cwo_logo = time() . '.' . $request->file('cwo_logo')->extension();
            $path = $request->file('cwo_logo')->move(public_path('images/cwo/'), $cwo_logo);
        }

        /*insert into cwo_master table starts*/
        $data = CarWashOwner::create([
            'cwo_name'=> $cwo_name,
            'cwo_company'=> $cwo_company,
            'cwo_email'=> $cwo_email,
            'cwo_phone'=> $cwo_phone,
            'address'=> $address_line_1 . ', ' . $address_line_2,
            'cwo_business_details'=> $cwo_business_details,
            'allow_prebooking'=> $allow_prebooking,
            'is_paid'=> 0,
            'cwo_logo'=> $cwo_logo,
            'created_at'=>$dt->toDayDateTimeString(),
            'updated_at'=>$dt->toDayDateTimeString()
        ]);
        /*insert into cwo_master table ends*/

        /*insert into users table starts*/
        $cwo_id = $data->id;
        if($cwo_name == ''){
            $cwo_name = $cwo_company;
        }
        $dataCwo = User::create([
            'name'=> $user_name,
            'email'=> $cwo_email,
            'password'=> $password,
            'user_type'=> 2,
            'is_active'=> 1,
            'phone'=> $cwo_phone,
            'cwo_id'=> $cwo_id,
            'created_at'=>$dt->toDayDateTimeString(),
            'updated_at'=>$dt->toDayDateTimeString()
        ]);
        /*insert into users table ends*/

        /*insert into cwo_subscriptions table starts*/
        $cwo_subscription_id = 0;
        if($subscription_detail_id != ''){
            $today = date('Y-m-d');
            $time = strtotime(date("Y-m-d"));
            if($subscription_type == 1){
                $end_date = date("Y-m-d", strtotime("+1 month", $time));
            }
            if($subscription_type == 2){
                $end_date = date("Y-m-d", strtotime("+1 year", $time));
            }
            $dataCwoSubscription = CwoSubscription::create([
                'subscription_detail_id'=> $subscription_detail_id,
                'cwo_id'=> $cwo_id,
                'start_date'=> $today,
                'end_date'=> $end_date,
                'type'=> $subscription_type,
                'amount'=> $amount,
                'status'=> 1,
                'created_at'=>$dt->toDayDateTimeString(),
                'updated_at'=>$dt->toDayDateTimeString()
            ]); 
            $cwo_subscription_id = $dataCwoSubscription->id;  

            $cwoDetails = CarWashOwner::findOrFail($cwo_id);
            $cwoDetails->update([
                'is_paid'=> 1,
                'updated_at'=>$dt->toDayDateTimeString()
                ]);
        }
        /*insert into cwo_subscriptions table ends*/

        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'cwo_id' => $cwo_id,
            'user_id' => $dataCwo->id,
            'cwo_subscription_id' => $cwo_subscription_id
        ]);

    }

    public function login(Request $request){
        $validate = Validator::make($request->all(), 
            [
                'email' => 'required|email',
                'password' => 'required',
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                // 'message' => $validate->errors(),
                'message' => $errorString,
            ]);
        }

        $email = $request->input('email');
        $password = $request->input('password');
        $dt = Carbon::now(); 
        $credentials = [
            'email' => $email,
            'password' => $password,
            'user_type' => 2,
        ];
        if(!Auth::guard('web')->attempt($credentials)) {    
            return response()->json([
                'success' => 0,
                'message' => 'Sorry! Email & Password does not match with our record.',
            ]);
        }
        $user = User::where('email', $email)->first();
        // echo "<pre>";print_r($user->toArray());exit;
        $getCwo = CarWashOwner::where('id', $user->cwo_id)->select('is_paid')->first();
        // if($getCwo->is_paid == 0){
        //     return response()->json([
        //         'success' => 0,
        //         'message' => 'Sorry! The car wash owner company did not pay till now.',
        //     ]);
        // }
        $token = '';
        $token = $user->createToken('App User Token');
        $token = $token->plainTextToken;

        /*token create starts*/
        /*$token_email = 'admin@gmail.com';
        $token_password = '123456';
        $credentials = [
            'email' => $token_email,
            'password' => $token_password,
            'user_type' => 1,
        ];  
        if(Auth::attempt($credentials)){
            $tokenUser = User::where('email', $token_email)->first();
            $token = $tokenUser->createToken('App Token');
            $token = $token->plainTextToken;
        } else {
            $token = '';
        }*/
        /*token create ends*/

        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'cwo_id' => $user->cwo_id,
            'user_id' => $user->id,
            'name' => $user->name,
            'email' => $user->email,
            'phone' => $user->phone,
            'address' => $user->address,
            'is_cwo_paid' => $getCwo->is_paid,
            'token' => $token
        ]);

    }

    public function addSubscription(Request $request){
        $validate = Validator::make($request->all(), 
            [
                'cwo_id' => 'required',
                'subscription_detail_id' => 'required',
                'subscription_type' => 'required',
                'amount' => 'required',
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                // 'message' => $validate->errors(),
                'message' => $errorString,
            ]);
        }

        $cwo_id = $request->input('cwo_id');
        $subscription_detail_id = $request->input('subscription_detail_id');
        $subscription_type = $request->input('subscription_type');
        $amount = $request->input('amount');
        $dt = Carbon::now(); 

        /*insert into cwo_subscriptions table starts*/
        $today = date('Y-m-d');
        $time = strtotime(date("Y-m-d"));
        if($subscription_type == 1){
            $end_date = date("Y-m-d", strtotime("+1 month", $time));
        }
        if($subscription_type == 2){
            $end_date = date("Y-m-d", strtotime("+1 year", $time));
        }
        $dataCwoSubscription = CwoSubscription::create([
            'subscription_detail_id'=> $subscription_detail_id,
            'cwo_id'=> $cwo_id,
            'start_date'=> $today,
            'end_date'=> $end_date,
            'type'=> $subscription_type,
            'amount'=> $amount,
            'status'=> 1,
            'created_at'=>$dt->toDayDateTimeString(),
            'updated_at'=>$dt->toDayDateTimeString()
        ]); 
        $cwo_subscription_id = $dataCwoSubscription->id;  

        $cwoDetails = CarWashOwner::findOrFail($cwo_id);
        $cwoDetails->update([
            'is_paid'=> 1,
            'updated_at'=>$dt->toDayDateTimeString()
            ]);
        /*insert into cwo_subscriptions table ends*/

        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'cwo_subscription_id' => $cwo_subscription_id
        ]);

    }

    public function details(Request $request){
        $validate = Validator::make($request->all(), 
            [
                'cwo_id' => 'required',
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                // 'message' => $validate->errors(),
                'message' => $errorString,
            ]);
        }

        $cwo_id = $request->input('cwo_id');
        $getCwo = CarWashOwner::with('currencyDetail')->where('id', $cwo_id)->first();
        if($getCwo != ''){
            return response()->json([
                'success' => 1,
                'message' => 'Success.',
                'cwo_id' => $cwo_id,
                'cwo_name' => $getCwo->cwo_name,
                'cwo_isd' => $getCwo->cwo_isd,
                'cwo_phone' => $getCwo->cwo_phone,
                'cwo_email' => $getCwo->cwo_email,
                'cwo_company' => $getCwo->cwo_company,
                // 'cwo_logo' => $getCwo->cwo_logo,
                'cwo_logo' => asset('images/cwo') . '/' . $getCwo->cwo_logo,
                'cwo_business_details' => $getCwo->cwo_business_details,
                'address' => $getCwo->address,
                'allow_prebooking' => $getCwo->allow_prebooking,
                'is_paid' => $getCwo->is_paid,
                'currency' => $getCwo->currencyDetail
            ]);    
        } else {
            return response()->json([
                'success' => 0,
                'message' => 'The CWO ID does not exist.',
            ]);
        }
    }

    public function addUser(Request $request){
        $validate = Validator::make($request->all(), 
            [
                'cwo_id' => 'required',
                'name' => 'required',
                'email' => 'required|email|unique:users,email',
                'phone' => 'required',
                'address' => 'required',
                'password' => [
                    'required',
                    // 'string',
                    // 'min:8',             // must be at least 8 characters in length
                    // 'regex:/[a-z]/',      // must contain at least one lowercase letter
                    // 'regex:/[A-Z]/',      // must contain at least one uppercase letter
                    // 'regex:/[0-9]/',      // must contain at least one digit
                    // 'regex:/[!@#$%^&*()]/', // must contain a special character
                ],
            ],[
                'email.unique' => 'This email already exists.'
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                // 'message' => $validate->errors(),
                'message' => $errorString,
            ]);
        }

        $cwo_id = $request->input('cwo_id');
        $name = $request->input('name');
        $email = $request->input('email');
        $phone = $request->input('phone');
        $address = $request->input('address');
        $password = Hash::make($request->input('password'));
        $dt = Carbon::now();

        $image = '';
        if ($request->hasFile('image')) {
            $image = time() . '.' . $request->file('image')->extension();
            $path = $request->file('image')->move(public_path('images/user/'), $image);
        }

        /*insert into users table starts*/
        $record = User::create([
            'name'=> $name,
            'email'=> $email,
            'password'=> $password,
            'user_type'=> 2,
            'phone'=> $phone,
            'address'=> $address,
            'cwo_id'=> $cwo_id,
            'image'=> $image,
            'created_at'=>$dt->toDayDateTimeString(),
            'updated_at'=>$dt->toDayDateTimeString()
        ]);
        /*insert into users table ends*/
        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'user_id' => $record->id
        ]);

    }

}
