<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Yajra\Datatables\Datatables as Datatables;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Facades\Excel;
use Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Str;
use Auth;
use Session;
use Request as req;
use Illuminate\Support\Facades\Mail;
use App\Mail\ResendMail;
use App\Helpers\MailHelper as MailHelper;
use App\Mail\VerifyMail;
use App\User;
use App\Organization;
use App\Client_Organization;
use App\Country;
use App\VerifyUser;
use App\PaymentLink;
use App\ServerConfig;
use App\UserProduct;
use App\District;
use App\State;
use App\Seat;
use App\User_Seat;
use App\Seat_Permission;
use App\Office;
use App\Seat_Role;

class SubscriptionController extends Controller
{
    //////subscription list page////////////////////
    public function subscription()
    {
        return view('subscription/subscription');
    }  
    public function subscription_create($slugname,$frequency)
    {
        $paymentlinks = PaymentLink::where('slugname',$slugname)->where('frequency',$frequency)->first();
        $countries = Country::all();
        return view('subscription/subscription_create', compact('slugname','countries','frequency','paymentlinks'));
    }

    public function subscription_post(Request $request)
    {
        //dd($request);
        $user_name = $request->user_name;
        $email_address = $request->email_address;
        $slugname = $request->slugname;
        $frequency = $request->frequency;
        $address_line1 = $request->address_line1;
        $address_country = $request->address_country;
        $password = $request->password;
        $office=$request->officename;
        $paymentlinks = PaymentLink::where('slugname',$slugname)->where('frequency',$frequency)->first();
        if(isset($paymentlinks))
        {
            $display_name = $paymentlinks->display_name;
            $display_frequency = $paymentlinks->frequency;
        }
        ////check the user already exist in stripe/////////////////////////scenario 1//////////////////
        $usercount = User::where('email',$email_address)->count();
        if($usercount==0)
        {
            /////tables fileds added to ffms///////////////////////////
                ////bcrypt password /////////////////////
                $pass=bcrypt($password); 
                /////user added//////////////////////////
                $dateofpost = date("Y-m-d");
                $standlist = new User([
                        'name'  => $user_name,
                        'email'  => $email_address,
                        'password' => $pass,
                        'created_at'   => $dateofpost,
                        'updated_at'   => $dateofpost,
                        'address' => $address_line1,
                        'country_code' => $address_country,
                        ]);
                $standlist->save();       
                $lastinsertedID=$standlist->id; 
                $user_id = $lastinsertedID;
                ////////////////////////////////////////////////////////
                ////add slugname ///////////////////////////
                $userprds = UserProduct::create([
                    'email' => $email_address,
                    'slugname' => $slugname,
                    'frequency' => $frequency,
                ]);
                ////email verification///////////////////////////
                $verifyUser = VerifyUser::create([
                    'user_id' => $user_id,
                    'frequency' => $frequency,
                    'token' => str_random(40)
                ]);
                $insert_id = Office::create([//model name database field name
                        'office_name' => $office,
                        'updated_by'=>$user_id
                    ]);
                $office_id = $insert_id->id;
                $seat_insert_id = Seat::create([//model name database field name
                        'office_id' => $office_id,
                        'seat_name' => 'Administrator',
                        'updated_by'=>$user_id
                    ]);
                $seat_id = $seat_insert_id->id;
                $seat_permission_insert_id = Seat_Permission::create([//model name database field name
                      'seat_id' => $seat_id,
                      'permission_id' => 1,
                      'updated_by'=>$user_id
                    ]);
                $seat_role_insert_id = Seat_Role::create([//model name database field name
                          'role_id' => 6,
                          'seat_id' => $seat_id,
                          'updated_by'=>$user_id
                       ]);
                $user_seat_insert_id = User_Seat::create([//model name database field name
                        'user_id' => $user_id,
                        'seat_id' => $seat_id,
                        'updated_by'=>$user_id
                    ]);
            /////////////////////////////////////////////////////////////////////
            ////////////////////////////////////////// //////////////////////////
                $user = User::where('id',$user_id)->first();
                //Mail::to($email_address)->send(new VerifyMail ($user));
                $userverify = VerifyUser::where('user_id',$user_id)->where('frequency',$frequency)->first();
                if(isset($userverify))
                {
                    $verify_token = $userverify->token; 
                }
                $formurl = "<a href=".url('verify', $verify_token).">Verify Email</a>";
                $subject = "Registration";
                $html="<div style='color: #343434; font-family: Open Sans; font-size: 20px; text-align: justify;'>
                 Hello ".$user_name.",<br><br>Your registration for the ".$display_name."(".$display_frequency." subscription) has been successfully processed.<br> Your registered email-id is ".$email_address.". <br><br> Please click the below link to verify your email account. <br><br> ".$formurl."<br><br> Thanks,<br> Team DigiFile.";
                $text=$html;
                $mailobj = new MailHelper();
                $result=$mailobj->sendmailbymailgun($subject,$html,$text,$email_address);
            /////////////////////////////////////////////////////////////////////
            $status=0;
            $message="";
            
            return view('subscription/verification_msg', compact('slugname','frequency','email_address','status','message','paymentlinks','display_name','display_frequency'));

        }
        else   ////////////scenario 2&3//////////////
        {
            $users = User::where('email',$email_address)->first();
            if(isset($users))
            {
                $name = $users->name;
                $user_id = $users->id;
                $verified = $users->verified;
            }
            if($verified==1)   /////verification is done
            {
                $verifyUser = VerifyUser::where('user_id', $user_id)->first();
                if(isset($verifyUser))
                {
                    $frequency = $verifyUser->frequency;
                }
                //////checking for subscription///////////////////////////////////////
                $data = [
                        'name' => $name,
                        'email' => $email_address,
                        'product_slugname' => 'digifile',
                        'frequency' => $frequency,
                    ];
                $server_config = ServerConfig::first();
                if(isset($server_config))
                {
                    $api_url = $server_config->server_url;
                }
                $curl = curl_init();
                curl_setopt_array($curl, array(
                    CURLOPT_URL => $api_url.'api/checksubscriptionexist',
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_ENCODING => "",
                    CURLOPT_MAXREDIRS => 10,
                    CURLOPT_TIMEOUT => 0,
                    CURLOPT_FOLLOWLOCATION => true,
                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                    CURLOPT_CUSTOMREQUEST => "POST",
                    CURLOPT_POSTFIELDS => json_encode($data),
                    CURLOPT_HTTPHEADER => array(
                        // Set here requred headers
                        "accept: */*",
                        "accept-language: en-US,en;q=0.8",
                        "content-type: application/json",
                        "X-Authorization: jIsrkbDIKRVMk80n0TDj1DiG9THJWZ7SVazMl5mEAx7GAcXb2swIMUcioUatl7MW",     //////api key generated for subscription check for already exist or not
                    ),
                ));
                //dd($curl);
                $response = curl_exec($curl);
                //dd($response);
                $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
                $err = curl_error($curl);
                curl_close($curl);
                if ($err) 
                {
                    echo "cURL Error #:" . $err;
                } 
                else 
                {
                    $plans = json_decode($response);
                }
                if($plans->stripe_status=="active")  /////if subscription is active
                {
                    $status = 1;
                    $message = "Welcome back ".$user_name."!, It looks like you've previously registered with us.. To manage your subscription, please log in to the application and navigate to the subscription section. From there, you can review your existing plan. If you encounter any issues or need assistance, our support team is here to help. Thank you for choosing our service!";                  
                }
                else   ///////if subscription is inactive/incomplete
                {
                    $status = 2;
                    $message = "Welcome back ".$user_name."!, It looks like you've previously registered with us. To continue or manage your subscription, please log in to the application and navigate to the subscription section. From there, you can review your existing plan. If you encounter any issues or need assistance, our support team is here to help. Thank you for choosing our service!";
                }
                return view('subscription/verification_msg', compact('slugname','frequency','email_address','status','message'));
            }
            else   /////if verification is not done
            {
                $status = 3;
                $message = "Welcome back ".$user_name."!, It looks like you've previously registered with us. Do you want to resend mail to verify your account. If you encounter any issues or need assistance, our support team is here to help. Thank you for choosing our service!";
                //After verification you can proceed to payment. To continue or manage your subscription, please log in to the application and navigate to the subscription section. From there, you can review your existing plan.
                return view('subscription/verification_msg', compact('slugname','frequency','email_address','status','message','display_name','display_frequency'));
            }

        }
        //dd($plans);
        ////////////////////////////////////////////////////////////////////////
        
    }
    /*public function subscription_post_old(Request $request)
    {
        //dd($request);
        $organisation_name = $request->organisation_name;
        $user_name = $request->user_name;
        $email_address = $request->email_address;
        $slugname = $request->slugname;
        $frequency = $request->frequency;
        $address_line1 = $request->address_line1;
        $address_country = $request->address_country;
        $password = $request->password;

        $user_prdcount = UserProduct::where('email',$email_address)->where('slugname',$slugname)->where('frequency',$frequency)->count();
        if($user_prdcount==0)
        {

                /////tables fileds added to epas///////////////////////
                ////////organization add if exist//////////////////////////
                $num=rand(101, 999);
                $dateofpost=date("Y-m-d");
                $orglist = new Organization([
                    'created_at'   => $dateofpost,
                    'updated_at'   => $dateofpost,
                    'client_organization'  => $organisation_name,
                    'code'  => $num,
                    'auditor_firm_flag' => 0,
                ]);
                $orglist->save(); 
                $org_ID=$orglist->id; 
                //////get eqas ID for organization/////////////////////////////////
                $rand_alphanum_org = randomString();
                $eqas_ID_org = $org_ID.$num.$rand_alphanum_org;
                $orgeqaslist=Organization::find($org_ID);
                $orgeqaslist->EQAS_ID=$eqas_ID_org;
                $orgeqaslist->save(); 
                //////////////////////////////////////////////////
                /////insert values to client_organization table///////////////////////////////
                $stand_orglist = new Client_Organization([
                    'organization_id'  => $org_ID,
                    'client_organization_id' => $org_ID,
                    'created_at'   => $dateofpost,
                    'updated_at'   => $dateofpost,
                    'active_flag' => 1,
                    ]);
                $stand_orglist->save(); 
                $usercount = User::where('email',$email_address)->count();
                if($usercount==0)
                {
                    ////bcrypt password /////////////////////
                    $pass=bcrypt($password); 
                    $standlist = new User([
                            'name'  => $user_name,
                            'email'  => $email_address,
                            'password' => $pass,
                            'created_at'   => $dateofpost,
                            'updated_at'   => $dateofpost,
                            'organization_id' => $org_ID,
                            'role_id' => 1, /////manager role ////
                            'address' => $address_line1,
                            'country_code' => $address_country,
                            ]);
                    $standlist->save();       
                    $lastinsertedID=$standlist->id; 
                    $user_id = $lastinsertedID;
                    //////get eqas ID/////////////////////////////////
                    $rand_alphanum = randomString();
                    $eqas_ID = $lastinsertedID.$rand_alphanum;
                    $useqaslist=User::find($lastinsertedID);
                    $useqaslist->eqas_ID=$eqas_ID;
                    $useqaslist->save();
                    $orglistupd=Organization::find($org_ID);
                    $orglistupd->generated_by=$lastinsertedID;
                    $orglistupd->save();
                    ////////////////////////////////////////////////////////
                }
                else
                {
                    $userobj = User::where('email',$email_address)->first();
                    if(isset($userobj))
                    {
                        $user_id = $userobj->id;
                    }
                }
                ////add slugname ///////////////////////////
                $userprds = UserProduct::create([
                    'email' => $email_address,
                    'slugname' => $slugname,
                    'frequency' => $frequency,
                ]);
                ////email verification///////////////////////////
                $verifyUser = VerifyUser::create([
                    'user_id' => $user_id,
                    'frequency' => $frequency,
                    'token' => str_random(40)
                ]);
                $user = User::where('id',$user_id)->first();
                //Mail::to($email_address)->send(new VerifyMail ($user));
                $userverify = VerifyUser::where('user_id',$user_id)->where('frequency',$frequency)->first();
                if(isset($userverify))
                {
                    $verify_token = $userverify->token; 
                }
                $formurl = "<a href=".url('verify', $verify_token).">Verify Email</a>";
                $subject = "Registration";
                $html="<div style='color: #343434; font-family: Open Sans; font-size: 20px; text-align: justify;'>
                 Hello ".$user_name.",<br><br>Your registration has been successfully registered for ".$slugname."(".$frequency.").<br> Your registered email-id is ".$email_address." , Please click on the below link to verify your email account. <br><br> ".$formurl."<br><br> Thanks,<br> Team Dewpas.";
                $text=$html;
                $mailobj = new MailHelper();
                $result=$mailobj->sendmailbymailgun($subject,$html,$text,$email_address);
                /////////////////////////////////////////////////
        }
        else
        {
            $users = User::where('email',$email_address)->first();
            if(isset($users))
            {
                $user_id = $users->id;
            }
            $userprdcount = UserProduct::where('email',$email_address)->where('slugname',$slugname)->where('frequency',$frequency)->count();
            if($userprdcount==0)
            {
                ////add slugname ///////////////////////////
                $userprds = UserProduct::create([
                    'email' => $email_address,
                    'slugname' => $slugname,
                    'frequency' => $frequency,
                ]);
            }
            $userverifycount = VerifyUser::where('user_id',$user_id)->where('slugname',$slugname)->count();
            if($userverifycount==0)
            {
                ////email verification///////////////////////////
                $verifyUser = VerifyUser::create([
                    'user_id' => $user_id,
                    'frequency' => $frequency,
                    'token' => str_random(40)
                ]);
            }
            $user = User::where('id',$user_id)->first();
            $userverify = VerifyUser::where('user_id',$user_id)->where('frequency',$frequency)->first();
            if(isset($userverify))
            {
                $verify_token = $userverify->token; 
            }
            //Mail::to($email_address)->send(new VerifyMail ($user));
            $formurl = "<a href=".url('verify', $verify_token).">Verify Email</a>";
            $subject = "Registration";
            $html="<div style='color: #343434; font-family: Open Sans; font-size: 20px; text-align: justify;'>
             Dear ".$email_address.",<br><br>Your email has been successfully registered for ".$slugname."(".$frequency.").<br> Your registered email-id is ".$email_address." , Please click on the below link to verify your email account. <br><br> ".$formurl."<br><br> Thanks,<br> Team Dewpas.";
            $text=$html;
            $mailobj = new MailHelper();
            $result=$mailobj->sendmailbymailgun($subject,$html,$text,$email_address);
                /////////////////////////////////////////////////
        }
        return view('subscription/verification_msg', compact('slugname','frequency','email_address'));
    }*/

    /*public function verification_msg($user_id)
    {
        $user = User::where('id',$user_id)->first();
        if(isset($user))
        {
            $email_address = $user->email;
        }
        $userverify = VerifyUser::where('user_id',$user_id)->first();
        if(isset($userverify))
        {
            $frequency = $userverify->frequency;
        }
        $userprd = UserProduct::where('email',$email_address)->where('frequency',$frequency)->first();
        if(isset($userprd))
        {
            $slugname = $userprd->slugname;
        }
        
    }*/

    ///////verify user///////////////////////////
    public function verifyUser($token)
    {
        $log_sts = 0;
        $sts = 0;
        $slugname="";
        $frequency="";
        $status="";
        $verifyUser = VerifyUser::where('token', $token)->first();
        if(isset($verifyUser))
        {
            $user = $verifyUser->user;
            $email = $verifyUser->user->email;
            $frequency = $verifyUser->frequency;

            $userproduct = UserProduct::where('email',$email)->where('frequency',$frequency)->orderBy('id','desc')->first();
            //dd($userproduct);
            if(isset($userproduct))
            {
                $slugname = $userproduct->slugname;
                $frequency = $userproduct->frequency;
            }
            $name = $verifyUser->user->name;
            if(!$user->verified) 
            {
                $verifyUser->user->verified = 1;
                $verifyUser->user->save();
                $status = "Your e-mail is verified. You can now Proceed to Payment.";
            }
            else
            {
                $data = [
                    'name' => $name,
                    'email' => $email,
                    'product_slugname' => 'digifile',
                    'frequency' => $frequency,
                ];
                $server_config = ServerConfig::first();
                if(isset($server_config))
                {
                    $api_url = $server_config->server_url;
                }
                $curl = curl_init();
                curl_setopt_array($curl, array(
                    CURLOPT_URL => $api_url.'api/checksubscriptionexist',
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_ENCODING => "",
                    CURLOPT_MAXREDIRS => 10,
                    CURLOPT_TIMEOUT => 0,
                    CURLOPT_FOLLOWLOCATION => true,
                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                    CURLOPT_CUSTOMREQUEST => "POST",
                    CURLOPT_POSTFIELDS => json_encode($data),
                    CURLOPT_HTTPHEADER => array(
                        // Set here requred headers
                        "accept: */*",
                        "accept-language: en-US,en;q=0.8",
                        "content-type: application/json",
                        "X-Authorization: jIsrkbDIKRVMk80n0TDj1DiG9THJWZ7SVazMl5mEAx7GAcXb2swIMUcioUatl7MW",     //////api key generated for subscription check for already exist or not
                    ),
                ));
                //dd($curl);
                $response = curl_exec($curl);
                //dd($response);
                $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
                $err = curl_error($curl);
                curl_close($curl);
                if ($err) 
                {
                    echo "cURL Error #:" . $err;
                } 
                else 
                {
                    $stripe_status = $response;
                }
                //dd($stripe_status);
                if($stripe_status=="active")
                {
                    $log_sts=1;
                    $status = "Your e-mail is already verified and you have an active subscription for ".$slugname." (".$frequency."). You can now Proceed to Login.";
                }
                else
                {
                    $log_sts=0;
                    $status = "Your e-mail is already verified. But subscription is missing for ".$slugname." (".$frequency."). Please Proceed to Payment.";
                }
            }
        }
        else
        {
            $sts = 1;
            $status = "Sorry your email cannot be identified.";
        }
        $paymentlinks ="";
        if($slugname && $frequency)
        {
            $paymentlinks = PaymentLink::where('slugname',$slugname)->where('frequency',$frequency)->orderBy('id','desc')->first();
        }
        //dd($sts);
        return view('subscription/subscription_msg' , compact('sts','paymentlinks','status','log_sts','email'));
    }

    public function subscription_payment_msg()
    {
        return view('subscription/subscription_payment_msg');
    }

    function resendemail(Request $request)
    {
        //dd($request);
        $email_address = $request->email_address;
        $users = User::where('email',$email_address)->first();
        if(isset($users))
        {
            $user_name = $users->name;
            $user_id = $users->id;
        }
        $slugname = $request->slugname;
        $frequency = $request->frequency;
        $paymentlinks = PaymentLink::where('slugname',$slugname)->where('frequency',$frequency)->first();
        if(isset($paymentlinks))
        {
            $display_name = $paymentlinks->display_name;
            $display_frequency = $paymentlinks->frequency;
        }
        $userverify = VerifyUser::where('user_id',$user_id)->where('frequency',$frequency)->first();
        if(isset($userverify))
        {
            $verify_token = $userverify->token; 
        }
        $formurl = "<a href=".url('verify', $verify_token).">Verify Email</a>";
        $html="<div style='color: #343434; font-family: Open Sans; font-size: 20px; text-align: justify;'>
                 Hello ".$user_name.",<br><br>Your registration for the ".$display_name."(".$display_frequency." subscription) has been successfully processed.<br> Your registered email-id is ".$email_address.".<br><br> Please click the below link to verify your email account. <br><br> ".$formurl."<br><br> Thanks,<br> Team DigiFile.";
        $data= ['message' => $html, 'mailto'=>$email_address, 'name_data'=>'Resend Mail' ];
        //dd($data);
        //mailing to the registered email
        Mail::to($email_address)->send(new ResendMail($data));
        return 1;
    }
}
