<?php

namespace App\Modules\Network\Controllers;

// Laravel Specifics
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;

// Creatia Core
use App\Models\Asns;

// Module Specifics
use App\Modules\Network\Controllers\NetworkController;
use App\Modules\Network\Models\PrefixExclusions;
use App\Modules\Network\Models\PrefixInclusions;


use Log;

class AdminNetworkController extends NetworkController
{
    public function get_inclusions(Request $_r, $_asn_id) {
        if(Asns::find($_asn_id)) {        
            return response()->json(PrefixInclusions::select(DB::raw('concat("address", \'/\', "mask") as cidr'))->where('asn_id', '=', $_asn_id)->pluck('cidr') ?? [], 200);
        }

        return response()->json(['detail' => __('api.500_GENERIC')], 500);
    }

    public function get_exclusions(Request $_r, $_asn_id) {
        if(Asns::find($_asn_id)) {        
            return response()->json(PrefixExclusions::select(DB::raw('concat("address", \'/\', "mask") as cidr'))->where('asn_id', '=', $_asn_id)->pluck('cidr') ?? [], 200);
        }

        return response()->json(['detail' => __('api.500_GENERIC')], 500);
    }

    public function put_inclusions(Request $_r, $_asn_id) {
        try {
            if(Asns::find($_asn_id)) {

                $to_insert = [];
    
                foreach($_r->input('addresses') as $addr) {
                    $to_insert[] = [
                        'asn_id' => $_asn_id,
                        'mask' => $addr['mask'],
                        'address' => $addr['address']
                    ];
                }
    
                DB::beginTransaction();
    
                PrefixInclusions::where('asn_id', '=', $_asn_id)->delete();
                PrefixInclusions::insert($to_insert);            
    
                DB::commit();
    
                return response()->json(['detail' => __('api.200_GENERIC')], 200);
            }
        }
        catch(\Exception $ex) {}

        return response()->json(['detail' => __('api.500_GENERIC')], 500);
    }

    public function put_exclusions(Request $_r, $_asn_id) {
        try {
            if(Asns::find($_asn_id)) {

                $to_insert = [];
    
                foreach($_r->input('addresses') as $addr) {
                    $to_insert[] = [
                        'asn_id' => $_asn_id,
                        'mask' => $addr['mask'],
                        'address' => $addr['address']
                    ];
                }
    
                DB::beginTransaction();
    
                PrefixExclusions::where('asn_id', '=', $_asn_id)->delete();
                PrefixExclusions::insert($to_insert);            
    
                DB::commit();
    
                return response()->json(['detail' => __('api.200_GENERIC')], 200);
            }
        }
        catch(\Exception $ex) {}

        return response()->json(['detail' => __('api.500_GENERIC')], 500);
    }

}
