<?php

namespace App\Console\Commands;

use App\Mylog;
use App\Order as AppOrder;
use Codexshaper\WooCommerce\Facades\Order;
use Illuminate\Console\Command;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Mail;

class OrderUpdateGm extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'order:gmupdate';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Aggiornamenti ordini da GM';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $all_orderswoo = new Collection();
        $page = 1;
        $orderupdated = 0;
        do{
            $orderswoo = Order::all($options = ['per_page' => 100, 'page' => $page,'status'=> ["pending","processing","on-hold"]]);
            $all_orderswoo = $all_orderswoo->merge($orderswoo);
            $page++;
        } while($orderswoo->count() > 0);


        foreach($all_orderswoo as $orderwoo ){
            $this->info("Processing order #{$orderwoo->id}...");
            $ordergm = AppOrder::where('IdInternet', $orderwoo->id)->latest('DataOra')->first();
            if($ordergm){
                $this->info("Order #{$orderwoo->id} found in GM, checking status...");
                if($orderwoo->status == 'processing'){
                    $this->info("Order #{$orderwoo->id} is processing, checking if it needs to be completed...");
                    if($ordergm->EnabledWoo == 1){
                        $this->info("Order #{$orderwoo->id} needs to be completed, updating WooCommerce...");
                        $data = [
                            'status' => 'completed',
                        ];
                        $orderwooupdate = Order::update($orderwoo->id,$data);

                        // sum the number updated of order to the log
                        $orderupdated++;

                    }
                }
                elseif ($orderwoo->status == 'on-hold'){
                    $this->info("Order #{$orderwoo->id} is on-hold, checking if it needs to be processed...");
                    if($ordergm->FlagSospeso == 0) {
                        $this->info("Order #{$orderwoo->id} needs to be processed, updating WooCommerce...");
                        $data = [
                            'status' => 'processing',
                        ];
                        $orderwooupdate = Order::update($orderwoo->id,$data);

                        // sum the number updated of order to the log
                        $orderupdated++;
                    }

                }
            }
            else{
                $this->info("Order #{$orderwoo->id} not found in GM, skipping...");
            }
        }

        // get the directory actual name and put in the log file        

        $log = ' Ordini aggiornati' . "\n";

        // check if there are orders to log
        if($orderupdated > 0) {
            // Send the email to the admin with the details of the order log
            Mail::raw($log, function ($message, $orderupdated)  {
                $message->to(Mylog::getEmail());
                $message->subject(Mylog::getSubjectEmail("Ordini Aggiornati su GM:" . $orderupdated));

            });
        }


        
    }
}
