<?php

namespace App\Traits;

use App\MailPayment;
use App\SubscriptionBalance;
use App\User;
use App\UserMailSubscription;
use Carbon\Carbon;
use DrewM\MailChimp\MailChimp;
use Illuminate\Http\Request;
use Mandrill;
use stdClass;


trait ChimpTrait
{
    public  $bodyImage_template = 134415;
    public  $headerFooter_template = 133263;
    public  $api_template = 135984;

    public  function init()
    {
        return new MailChimp(env('MAIL_CHIMP'));
    }

    public function initApi()
    {
        return new Mandrill(env('MANDRILL_KEY'));
    }

    public function get_campaign_report($camp_id)
    {
        $chimp = $this->init();
        return $chimp->get("reports/{$camp_id}");
    }

    public function array_to_object($array) {
        $obj = new stdClass;
        foreach($array as $k => $v) {
            if(strlen($k)) {
                if(is_array($v)) {
                    $obj->{$k} = $this->array_to_object($v);
                } else {
                    $obj->{$k} = $v;
                }
            }
        }
        return $obj;
    }

    public function chimpPaymentCurl($params)
    {

           MailPayment::query()->create((array)$params);

            $paymentEndpoint = "https://pay.npontu.com/api/pay";

            $request = array(
                'number' => $params->momo_number,
                'vendor' => $params->operator,
                'uid' => 'npdeywuro',
                'pass' => 'hdgt2314',
                'tp' => $params->transaction_id,
                'cbk' => $params->callback,
                'amt' => $params->amount,
                'msg' => 'DEYWURO EMAIL PAYMENT',
                'vou' => $params->voucher,
                'trans_type' => 'Debit'
            );
            $ch = curl_init($paymentEndpoint);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($ch);
            return json_decode($output);
    }

    public function paymentCallback(Request $request)
    {
        try {

            $this->log("Email Momo" . $request->input('transaction_id') . '||' . $request->input('status'));

            $transaction_id = $request->input('transaction_id');
            $status = strtolower($request->input('status'));
            $responseMessage = $request->input('responseMessage');
            $expires_on = Carbon::parse(now())->addDays(30); //gets new expiry date
            $user_id = (integer)explode('_', $transaction_id)[0];  //converts user id to int after explosion
            $user = $this->user($user_id);  //gets the user details


            $payment = MailPayment::query()->where('transaction_id', $transaction_id)->first();
            $payment->status   = $status;
            $payment->response = $responseMessage;
            $payment->save();  //updates the payment status

            if ($status != 'failed') {


               UserMailSubscription::query()->updateOrCreate(
                    ['user_id' => $user_id],
                    [
                        'is_paid' => true,
                        'expires_on' => $expires_on,
                        'email_pricing_id' => $payment->email_pricing_id
                    ]
                );

               if($this->user($user_id)->role_id == 3) {   //for resellers

                   SubscriptionBalance::query()->updateOrCreate(
                       ['user_id' => $user_id],
                       [
                           'no_emails' => $payment->email_pricing->no_emails,
                           'pricing' => $payment->email_pricing->pricing,
                           'no_audience' => $payment->email_pricing->no_audience,
                           'no_contacts' => $payment->email_pricing->no_contacts,
                           'email_pricing_id' => $payment->email_pricing_id
                       ]
                   );
               }


                $message = "You have successfully been subscribed to the email package.
                            The subscription expires on <b>$expires_on</b>.
                            For further assistance kindly contact <b>support@npontu.com</b><br>
                            Thank you.";

            }

            else {
                $message = "Your attempt to subscribe to an email package failed.
                            Kindly review your request and try again
                            For further assistance you may contact <b>support@npontu.com</b><br>
                            Thank you.";
            }


            $content = ['body' => $message, 'to' => $user->email, 'name' => $user->username,'subject'=>'DEYWURO PAYMENT NOTICE'];  //gets parameters ready for sending email
            $this->sendEmail($content);
        }catch (\Exception $exception){
            $this->log("EXCEPTION || " . $request->input('transaction_id') . '||' . $exception->getMessage());
        }



    }

    public function log($message)
    {
        $now = Carbon::parse(now());
        file_put_contents(storage_path() . '/logs/chimpanzee.log', "\n" . 'INFO: ' . $now . ' || ' .$message . PHP_EOL, FILE_APPEND);
    }

    public function user($user)
    {
        return User::query()->find($user);
    }









































}
