<?php

namespace App\Traits;
use App\Models\ZipcodeRange;

trait ZipcodeTraits {
    public function getZipcodesByRadius($zipcode, $mileradius) {
        // Fetch all the students from the 'student' table.
        $columns = [
            'twomiles',
            'fivemiles',
            'tenmiles',
            'fifteenmiles',
            'twentymiles',
            'twentyfivemiles',
            'fiftymiles',
            'onehundredmiles'
        ];
        $column_call = [];
        switch ($mileradius) {
            case '2':
                $column_call = $columns[0];
                break;
            case '5':
                $column_call = [$columns[0],$columns[1]];
                break;
            case '10':
                $column_call = [$columns[0],$columns[1],$columns[2]];
                break;
            case '15':
                $column_call = [$columns[0],$columns[1],$columns[2],$columns[3]];
                break;
            case '20':
                $column_call = [$columns[0],$columns[1],$columns[2],$columns[3],$columns[4]];
                break;
            case '25':
                $column_call = [$columns[0],$columns[1],$columns[2],$columns[3],$columns[4],$columns[5]];
                break;
            case '50':
                $column_call = [$columns[0],$columns[1],$columns[2],$columns[3],$columns[4],$columns[5],$columns[6]];
                break;
            case '100':
                $column_call = [$columns[0],$columns[1],$columns[2],$columns[3],$columns[4],$columns[5],$columns[6],$columns[7]];
                break;
            default:
                break;
        }
        
        $zipcodes =  ZipcodeRange::select($column_call)->where('zipcode', $zipcode)->get();
        $values = [];
        if(!$zipcodes->isEmpty()){                 
            switch ($mileradius) {
                case '2':
                    $values = json_decode($zipcodes[0]['twomiles'],true);
                    break;
                case '5':
                    $values = json_decode($zipcodes[0]['fivemiles'],true);
                    // $values = array_merge(json_decode($zipcodes[0]['twomiles'],true), json_decode($zipcodes[0]['fivemiles'],true));
                    break;
                case '10':
                    $values = json_decode($zipcodes[0]['tenmiles'],true);
                    // $values =array_merge(json_decode($zipcodes[0]['twomiles'],true),json_decode($zipcodes[0]['fivemiles'],true),json_decode($zipcodes[0]['tenmiles'],true));
                    break;
                case '15':
                    $values = json_decode($zipcodes[0]['fifteenmiles'],true);
                    // $values = array_merge(json_decode($zipcodes[0]['twomiles'],true),json_decode($zipcodes[0]['fivemiles'],true),json_decode($zipcodes[0]['tenmiles'],true),json_decode($zipcodes[0]['fifteenmiles'],true));
                    break;
                case '20':
                    $values = json_decode($zipcodes[0]['twentymiles'],true);
                    // $values =array_merge(json_decode($zipcodes[0]['twomiles'],true),json_decode($zipcodes[0]['fivemiles'],true),json_decode($zipcodes[0]['tenmiles'],true),json_decode($zipcodes[0]['fifteenmiles'],true),json_decode($zipcodes[0]['twentymiles'],true));
                    break;
                case '25':
                    $values = json_decode($zipcodes[0]['twentyfivemiles'],true);
                    // $values =array_merge(json_decode($zipcodes[0]['twomiles'],true),json_decode($zipcodes[0]['fivemiles'],true),json_decode($zipcodes[0]['tenmiles'],true),json_decode($zipcodes[0]['fifteenmiles'],true),json_decode($zipcodes[0]['twentymiles'],true),json_decode($zipcodes[0]['twentyfivemiles'],true));
                    break;
                case '50':
                    $values = json_decode($zipcodes[0]['fiftymiles'],true);
                    // $values =array_merge(json_decode($zipcodes[0]['twomiles'],true),json_decode($zipcodes[0]['fivemiles'],true),json_decode($zipcodes[0]['tenmiles'],true),json_decode($zipcodes[0]['fifteenmiles'],true),json_decode($zipcodes[0]['twentymiles'],true),json_decode($zipcodes[0]['twentyfivemiles'],true),json_decode($zipcodes[0]['fiftymiles'],true));
                    break;
                case '100':
                    $values = json_decode($zipcodes[0]['onehundredmiles'],true);
                    // $values =array_merge(json_decode($zipcodes[0]['twomiles'],true),json_decode($zipcodes[0]['fivemiles'],true),json_decode($zipcodes[0]['tenmiles'],true),json_decode($zipcodes[0]['fifteenmiles'],true),json_decode($zipcodes[0]['twentymiles'],true),json_decode($zipcodes[0]['twentyfivemiles'],true),json_decode($zipcodes[0]['fiftymiles'],true),json_decode($zipcodes[0]['onehundredmiles'],true));
                    break;
                default:
                    break;
            }
        }
        return $values;
    }


    public function validateZipcodeIfExisting($zipcode, $field_name = 'zipcode') 
    {
        $zipcode    =   ZipcodeRange::select('id')
                            ->where('zipcode', $zipcode)
                            ->first();

        if (!$zipcode) 
        {
            return response()->json(
                [
                'errors'     => ["Sorry, you have used a ZIP code that is unsupported in our current US ZIP code database."],
                'field_name' => $field_name
                ]
            )
            ->setStatusCode(201); 
        }
    }
}