<?php

namespace App\Console\Commands;

use App\Models\Asset;
use App\Models\License;
use App\Models\Setting;
use DB;

use Illuminate\Console\Command;

class SendExpirationAlerts extends Command
{

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'snipeit:expiring-alerts';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Check for expiring warrantees and service agreements, and sends out an alert email.';

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function fire()
    {

        // Expiring Assets
        $expiring_assets = Asset::getExpiringWarrantee(Setting::getSettings()->alert_interval);
        $this->info(count($expiring_assets).' expiring assets');

        $asset_data['count'] =  count($expiring_assets);
        $asset_data['email_content'] ='';
        $now = date("Y-m-d");


        foreach ($expiring_assets as $asset) {

            $expires = $asset->present()->warrantee_expires();
            $difference =  round(abs(strtotime($expires) - strtotime($now))/86400);

            if ($difference > 30) {
                $asset_data['email_content'] .= '<tr style="background-color: #fcffa3;">';
            } else {
                $asset_data['email_content'] .= '<tr style="background-color:#d9534f;">';
            }
            $asset_data['email_content'] .= '<td><a href="'.config('app.url').'/hardware/'.e($asset->id).'/view">';
            $asset_data['email_content'] .= $asset->present()->name().'</a></td><td>'.e($asset->asset_tag).'</td>';
            $asset_data['email_content'] .= '<td>'.e($asset->present()->warrantee_expires()).'</td>';
            $asset_data['email_content'] .= '<td>'.$difference.' '.trans('mail.days').'</td>';
            $asset_data['email_content'] .= '<td>'.($asset->supplier ? e($asset->supplier->name) : '').'</td>';
            $asset_data['email_content'] .= '<td>'.($asset->assignedTo ? e($asset->assignedTo->present()->name()) : '').'</td>';
            $asset_data['email_content'] .= '</tr>';
        }

        // Expiring licenses
        $expiring_licenses = License::getExpiringLicenses(Setting::getSettings()->alert_interval);
        $this->info(count($expiring_licenses).' expiring licenses');


        $license_data['count'] =  $expiring_licenses->count();
        $license_data['email_content'] = '';

        foreach ($expiring_licenses as $license) {
            $expires = $license->expiration_date;
            $difference =  round(abs(strtotime($expires) - strtotime($now))/86400);

            if ($difference > 30) {
                $license_data['email_content'] .= '<tr style="background-color: #fcffa3;">';
            } else {
                $license_data['email_content'] .= '<tr style="background-color:#d9534f;">';
            }
                $license_data['email_content'] .= '<td><a href="'.route('licenses.show', $license->id).'">';
                $license_data['email_content'] .= $license->name.'</a></td>';
                $license_data['email_content'] .= '<td>'.$license->expiration_date.'</td>';
                $license_data['email_content'] .= '<td>'.$difference.' days</td>';
                $license_data['email_content'] .= '</tr>';
        }

        if ((Setting::getSettings()->alert_email!='')  && (Setting::getSettings()->alerts_enabled==1)) {


            if (count($expiring_assets) > 0) {
                $this->info('Report sent to '.Setting::getSettings()->alert_email);
                \Mail::send('emails.expiring-assets-report', $asset_data, function ($m) {
                    $m->to(explode(',', Setting::getSettings()->alert_email), Setting::getSettings()->site_name);
                    $m->replyTo(config('mail.reply_to.address'), config('mail.reply_to.name'));
                    $m->subject(trans('mail.Expiring_Assets_Report'));
                });

            }

            if (count($expiring_licenses) > 0) {
                $this->info('Report sent to '.Setting::getSettings()->alert_email);
                \Mail::send('emails.expiring-licenses-report', $license_data, function ($m) {
                    $m->to(explode(',', Setting::getSettings()->alert_email), Setting::getSettings()->site_name);
                    $m->replyTo(config('mail.reply_to.address'), config('mail.reply_to.name'));
                    $m->subject(trans('mail.Expiring_Licenses_Report'));
                });

            }


        } else {

            if (Setting::getSettings()->alert_email=='') {
                echo "Could not send email. No alert email configured in settings. \n";
            } elseif (Setting::getSettings()->alerts_enabled!=1) {
                echo "Alerts are disabled in the settings. No mail will be sent. \n";
            }

        }




    }
}