<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

use App\Models\TelActivation;
use App\Models\EmailActivation;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            foreach (TelActivation::get() as $t) {
                if (time() > strtotime($t->ttl)) {
                    TelActivation::where('id', $t->id)->delete();
                }
            }
            foreach (EmailActivation::get() as $e) {
                if (time() > strtotime($e->ttl)) {
                    EmailActivation::where('id', $e->id)->delete();
                }
            }
        })->everyMinute();
        $schedule->call(function () {
            $dbbckp = '/work/storage/backup/mysql/';
            $flbckp = '/work/storage/backup/file/';
            $week = 604800; // １週間
            $fname = date('Ymd').date('H'); // 日付＋時

            // DBのバックアップ
            exec('/usr/bin/mysqldump --no-tablespaces --user='.config('database.connections.mysql.username').' --host='.config('database.connections.mysql.host').' --password='.config('database.connections.mysql.password').' --databases '.config('database.connections.mysql.database').' > '.$dbbckp.$fname.'_mysql.sql');

            // GZIPでDBを圧縮する（ストレージ為）
            exec('/bin/gzip '.$dbbckp.$fname.'_mysql.sql');

            // ファイルのバックアップ
            exec('/bin/tar zcfv '.$flbckp.$fname.'.tar.gz /work/storage/app/private/*');

            // 全てのSQLファイルを読み込むと、古いやつを削除する。
            foreach (scandir($dbbckp) as $s) {
                if ($s == '.' || $s == '..') continue;
                $t = str_replace('_mysql.sql.gz', '', $s); // extの削除
                $t = preg_replace('/[\w\d]{2}$/', '', $t); // 時間の削除
                if (strtotime($t) < time()-604800) {
                    exec('/bin/rm -rf '.$dbbckp.$s);
                }
            }

            // 全てのTARファイルを読み込むと、古いやつを削除する。
            foreach (scandir($flbckp) as $s) {
                if ($s == '.' || $s == '..') continue;
                $t = str_replace('.tar.gz', '', $s); // extの削除
                $t = preg_replace('/[\w\d]{2}$/', '', $t); // 時間の削除
                if (strtotime($t) < time()-604800) {
                    exec('/bin/rm -rf '.$flbckp.$s);
                }
            }
        })->twiceDaily(0, 12);
        // $schedule->command('inspire')->hourly();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}
