<?php
namespace App\Services;

use App\Models\Attribute;
use App\Models\Category;
use App\Models\Country;
use App\Models\Ingredient;
use App\Models\Product;
use App\Models\ShippingCountry;
use App\Models\ShoppingUser;
use App\Models\UserLevel;
use App\User;

class HTMLHelper
{


    private static $months = [
        1 => 'Januar',
        2 => 'Februar',
        3 => 'März',
        4 => 'April',
        5 => 'Mai',
        6 => 'Juni',
        7 => 'Juli',
        8 => 'August',
        9 => 'September',
        10 => 'Oktober',
        11 => 'November',
        12 => 'Dezember',
    ];


    private static $roles = [
        0 => 'Kunde',
        1 => 'Admin',
        2 => 'SuperAdmin',
        3 => 'SySAdmin',
    ];


    public static function getMonth($i){
        return self::$months[intval($i)];
    }

    public static function getRoleLabel($role_id = 0){
        return '<span class="badge  badge-pill '.self::getLabel($role_id).'">'.self::$roles[$role_id].'</span>';
    }

    public static function getLabel($id){
        switch ($id) {
            case 0:
                return 'badge-default';
                break;
            case 1:
                return 'badge-warning';
                break;
            case 2:
                return 'badge-primary';
                break;
            case 3:
                return 'badge-primary';
                break;
        }

    }

    public static function setContentReadMore($content){

        $sep = '##mehr lesen##';
        if(strpos($content, $sep) !== false){
            $name = 'collapse_'.random_int(1000, 10000);
            $split = explode($sep, $content);
            $first =  isset($split[0]) ? $split[0] : "";
            $text =  isset($split[1]) ? $split[1] : "";

            $content = $first;
            $content .= '<br><a class="btn btn-primary btn-sm mt-2 collapsed" data-toggle="collapse" href="#'.$name.'" role="button" aria-expanded="false" aria-controls="'.$name.'">
                            <span class="if-collapsed">'.__('mehr lesen').'</span>
                            <span class="if-not-collapsed">'.__('weniger lesen').'</span>
                            </a>';
            $content .= '<div class="collapse" id="'.$name.'">
              <div class="card card-body pt-0">
              '.$text.'
              </div>
            </div>';
        }
        return $content;
    }

    public static function getRolesOptions(){
        $ret = "";
        foreach (self::$roles as $role_id => $value){
            $ret .= '<option value="'.$role_id.'">'.$value.'</option>\n';
        }
        return $ret;
    }

    public static function getYearSelectOptions(){
        $start = date("Y", strtotime("-5 years", time()));
        $end = date("Y", strtotime("+1 years", time()));
        $values = range($start, $end);
        $now = date("Y", time());
        $ret = "";
        foreach ($values as $value){
            $attr = ($value == $now) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value.'" '.$attr.'>'.$value.'</option>\n';
        }
        return $ret;
    }

    public static function getAttributesWithoutParents($id = false, $sameId = false, $all = true){
        $values = Attribute::where('parent_id', null)->get();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('no').'</option>\n';
        }
        foreach ($values as $value){
            if($sameId == $value->id){
                continue;
            }
            $attr = ($value->id == $id) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
        }
        return $ret;
    }

    public static function getCategoriesWithoutParents($id = false, $sameId = false, $all = true){
        $values = Category::where('parent_id', null)->get();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('no').'</option>\n';
        }
        foreach ($values as $value){
            if($sameId == $value->id){
                continue;
            }
            $attr = ($value->id == $id) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
        }
        return $ret;
    }

    public static function getProductsOptions($ids = array(), $all = true){
        if($ids == null){
            $ids = array();
        }
        $values = Product::where('active', 1)->get();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('no').'</option>\n';
        }
        foreach ($values as $value){
            $attr =  in_array($value->id, $ids) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
        }
        return $ret;
    }

    public static function getCategoriesOptions($ids = array(), $all = true){
        $values = Category::where('active', 1)->get();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('no').'</option>\n';
        }
        foreach ($values as $value){
            $attr = in_array($value->id, $ids) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
        }
        return $ret;
    }

    public static function getProductIngredientsOptions($has_ids = array(), $all = true){
        $values = Ingredient::where('active', 1)->get();
        $ret = "";
        $attr = "";
        foreach ($values as $value){
            if(!in_array($value->id, $has_ids)){
                $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
            }
        }
        return $ret;
    }

    public static function getAttributesOptions($ids = array(), $all = true){
        $values = Attribute::where('active', 1)->get();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('no').'</option>\n';
        }
        foreach ($values as $value){
            $attr =  in_array($value->id, $ids) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
        }
        return $ret;
    }

    public static function getUserLevelOptions($id = false, $all = true){
        $values = UserLevel::where('active', 1)->get();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('no').'</option>\n';
        }
        foreach ($values as $value){
            $attr = ($value->id == $id) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
        }
        return $ret;
    }


     public static function getCompanyOptions($company){
        $options = array(1 => __('business'), 0 => __('private'), );
        $ret = "";
        foreach ($options as $id => $value){
            $attr = ($id == $company) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$id.'" '.$attr.'>'.$value.'</option>\n';
        }
        return $ret;
    }

    public static function getContriesWithMore($id, $all=true){#
        $values = Country::all();
        $counter = 1;
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('please select').'</option>\n';

        }
        foreach ($values as $value){
            if( $counter == 7){
                $ret .= '<optgroup label="'.__('further countrie').'">';
            }
            $attr = ($value->id == $id) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->getLocated().'</option>\n';

            $counter ++;
        }
        $ret .= '</optgroup>';
        return $ret;
    }

    public static function getContriesCodes($id, $all=true){#
        $values = Country::all();
        $counter = 1;
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('please select').'</option>\n';

        }
        foreach ($values as $value){

            if(!$value->phone) continue;
            if( $counter == 7){
                $ret .= '<optgroup label="'.__('further countrie').'">';
            }
            $attr = ($value->id == $id) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->phone.'('.$value->getLocated().')</option>\n';

            $counter ++;
        }
        $ret .= '</optgroup>';
        return $ret;
    }

    public static function getCountriesWithoutUsedShippings($all=true){#
        $values = Country::all();
        $country_ids = ShippingCountry::all()->pluck('country_id')->toArray();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('please select').'</option>\n';
        }
        foreach ($values as $value){
            if(!in_array($value->id, $country_ids)){
                $ret .= '<option value="'.$value->id.'">'.$value->getLocated().'</option>\n';
            }
        }
        return $ret;
    }

    public static function getCountryNameFormShipping($id){
        $value = ShippingCountry::find($id);
        if($value){
            return $value->country->getLocated();
        }
        return "not defined";
    }

    public static function getCountriesForShipping($id, $all=false){#
        $values = ShippingCountry::all();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('please select').'</option>\n';
        }
        foreach ($values as $value){
            $attr = ($value->id == $id) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->country->getLocated().'</option>\n';

        }
        return $ret;
    }

    public static function getSalutation($id){
        $values = array('mr' => __('MR'), 'ms' => __('MS'));
        $ret = "";
        $ret .= '<option value="">'.__('please select').'</option>\n';
        foreach ($values as $key => $value){
            $attr = ($key == $id) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$key.'" '.$attr.'>'.$value.'</option>\n';
        }
        return $ret;
    }

    public static function getSalutationLang($id){
        $values = array('mr' => __('MR'), 'ms' => __('MS'));
        return (!empty($values[$id]) ? $values[$id] : '');
    }

    public static function getTaxSaleOptions($id){
        $values = array('1' => __('taxable_sales_1'), '2' => __('taxable_sales_2'));
        $ret = "";
        $ret .= '<option value="">'.__('please select').'</option>\n';
        foreach ($values as $key => $value){
            $attr = ($key == $id) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$key.'" '.$attr.'>'.$value.'</option>\n';
        }
        return $ret;
    }

    public static function getMembersOptions($id, $all=false){
        $values = User::where('active', '=', true)->where('blocked', '=', false)->where('payment_account', '>=', now())->get();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('please select').'</option>\n';
        }
        foreach ($values as $value){
            $attr = ($value->id == $id) ? 'selected="selected"' : '';
            $to="";
            if($value->account){
                $to = $value->account->first_name." ".$value->account->last_name." | ";
            }
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$to.$value->email.' #'.$value->number.'</option>\n';

        }
        return $ret;
    }

    public static function getUserCustomerOptions($id, $all=false){
        $values = ShoppingUser::select(['id', 'billing_firstname', 'billing_lastname', 'billing_email', 'number'])
            ->where('shopping_users.member_id', '=', \Auth::user()->id)->get();
        $ret = "";
        if($all){
            $ret .= '<option value="">'.__('please select').'</option>\n';
        }
        foreach ($values as $value){
            dump($value);
            $attr = ($value->id == $id) ? 'selected="selected"' : '';
            $to = $value->billing_firstname." ".$value->billing_lastname." | ".$value->billing_email;
            $ret .= '<option value="'.$value->id.'" '.$attr.'>'.$to.' #'.$value->number.'</option>\n';

        }
        return $ret;
    }

    public static function getOptionRange($select, $from=1, $to=50){
        $values = range($from, $to);
        $ret = "";
        foreach ($values as $value){
            $attr = ($value == $select) ? 'selected="selected"' : '';
            $ret .= '<option value="'.$value.'" '.$attr.'>'.$value.'</option>\n';
        }
        return $ret;

    }
}