<?php
/**
 * Created by PhpStorm.
 * User: sunil
 * Date: 9/29/18
 * Time: 4:30 PM
 */

namespace App\Console\Commands;

use Illuminate\Console\Command;

class Encryption extends Command
{

    //to can be encrypt or decrypt
    protected $signature = 'crypto {--to=} {--options=}';

    private $nonEncrytable = array(
        'APP_ENV', 'APP_CONNECTION', 'IS_LOCAL', 'LOCAL','SENDGRID_API_KEY','SENTRY_LARAVEL_DSN','BITLY_ACCESS_TOKEN','BUGSNAG_API_KEY','APP_LOG_LEVEL', 'APP_DEBUG', 'BABYREADY'
    );
    private $to = 'encrypt';

    public function __construct(){
        parent::__construct();
    }

    public function handle(){

        if (\app()->runningInConsole()) {
            $this->to = $this->option('to');
            $options = $this->option('options');
            if ($options){
                $this->comment('php artisan crypto --to encrypt or decrypt');
                exit;
            }
        }

        $fileName = dirname(__DIR__, 3)."/.env";
        $envFile = fopen($fileName, "r") or die("Unable to open file!");
        $envData = fread($envFile,filesize($fileName));
        fclose($envFile);
        $data = array_values(array_filter(explode("\n",$envData)));

        $envDataEncrypted = [];
        foreach ($data as $item){
            $check = explode("=",$item);
            if (!in_array(trim($check[0]), $this->nonEncrytable) && isset($check[1]) && !empty($check[1]) && trim($check[1])) {
                if($this->to == 'decrypt') {
                    $envDataEncrypted[] = trim($check[0]) . '=' . (wall_decrypt(trim($check[1]), true) ? wall_decrypt(trim($check[1])) : $check[1]);
                }else{
                    $envDataEncrypted[] = trim($check[0]) . '=' . (!wall_decrypt(trim($check[1]), true) ? wall_encrypt(trim($check[1])) : $check[1]);
                }
            }else{
                 $envDataEncrypted[] = $item;
            }
        }

        $envDataDecrypted = implode("\n",$envDataEncrypted);
        $envFile = fopen($fileName, "wb") or die("Unable to write file!");
        fwrite($envFile, $envDataDecrypted);
        fclose($envFile);
    }
}
