<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Error;
use DB;
use App\Model\RegionModel;
use App\Model\UserAddressModel;

class AddressController extends Controller 
{
    // 添加收货地址
    public function add(Request $request)
    {
        if ($request->isMethod('post')) {
            $address_id = $request->input('address_id', 0);

            $data = [
                'user_id'        => $request->input('user_id', 0),
                'province'       => $request->input('province', ''),
                'city'           => $request->input('city', ''),
                'district'       => $request->input('district', ''),
                'detail_address' => $request->input('detail_address', ''),
                'zipcode'        => $request->input('zipcode', ''),
                'intl_code'      => $request->input('intl_code', ''),
                'consignee'      => $request->input('consignee', ''),
                'mobile'         => $request->input('mobile', ''),
                'is_default'     => $request->input('is_default', ''),
                'address_type'   => $request->input('address_type', 0),
                'operator_id'    => $request->user->userId,
            ];

            $valid = $this->_valid($data);

            if ($valid['errcode']) return $this->_valid($data);

            if ($address_id) {
                $data['address_id'] = $address_id;
                $url = Config('website.api_domain').'address/update';
                $errmsg = '编辑地址';
            } else {
                $url = Config('website.api_domain').'address/create';
                $errmsg = '新增地址';
            } 

            $data['k1'] = time();
            $data['k2'] = md5(md5($data['k1']).'fh6y5t4rr351d2c3bryi');
            $data['pf'] = 4;
   
            $temp = json_decode(curlApi($url, $data, "POST"), true);

            if ($temp['err_code'] != 0) return ['errcode' => Error::E_ADD_FAILED, 'errmsg' => $errmsg.'失败,'.$temp['err_msg']];
            
            return ['errcode' => 0, 'errmsg' => $errmsg.'成功'];
        }
    }

    // 地址
    public function getRegion($region_id)
    {
        $region = RegionModel::where('region_id', $region_id)->select('region_name')->first();

        return $region ? $region->region_name : '';
    }

    // 获取地址信息
    public function getAddressInfo(Request $request) 
    {
        if ($request->isMethod('post')) {
            $address_id = $request->input('address_id');

            $info = UserAddressModel::where('address_id', $address_id)->first();

            if (empty($info)) return ['errcode' => Error::E_NOT_EXISTS, 'errmsg' => '未找到'];

            return ['errcode' => 0, 'errmsg' => '', 'data' => $info];
        }
    }

    //验证
    private function _valid($data)
    {
        if (!$data['user_id']) {
            return array(
                    'errcode' => 1,
                    'errmsg' => '非法操作~',
                    'field' => ''
                );
        }
        if (!$data['province'] || !$data['city'] || !$data['district']) {
            return array(
                    'errcode' => 1,
                    'errmsg' => '您还没选择【所在地区】~',
                    'field' => 'district'
                );
        }
        if (!$data['detail_address']) {
            return array(
                    'errcode' => 1,
                    'errmsg' => '您还没填写【详细地址】~',
                    'field' => 'detail_address'
                );
        }

        if ($data['zipcode'] && !is_postcode($data['zipcode'])) {
            return array(
                    'errcode' => 1,
                    'errmsg' => '您填写的【邮政编码】格式不正确~',
                    'field' => 'zipcode'
                );
        }

        if (!$data['consignee']) {
            return array(
                    'errcode' => 1,
                    'errmsg' => '您还没填写【收货人】~',
                    'field' => 'consignee'
                );
        }

        if (!$data['mobile']) {
            return array(
                    'errcode' => 1,
                    'errmsg' => '您还没填写【联系电话】~',
                    'field' => 'link_mobile'
                );
        }

        if ($data['intl_code'] != '0086') {
            $mobile = $data['intl_code'].'+'.$data['mobile'];
        } else {
            $mobile = $data['mobile'];
        }

        if (!is_mobile($mobile)) {
            return array(
                    'errcode' => 1,
                    'errmsg' => '您填写的【联系电话】格式不正确~',
                    'field' => 'link_mobile'
                );
        }

        return array(
                    'errcode' => 0,
                    'errmsg' => '验证通过~',
                );
    }

    // Ajax地址列表  
    public function ajax_list(Request $request) 
    {
        $addressList = array();
        $map = array();

        if ($request->input('user_id')) {
            $map['user_id'] = $request->input('user_id', '');
        }
        if ($request->input('address_type') !== '') {
            $map['address_type'] = $request->input('address_type', '');
        }

        if ($map['user_id'] && isset($map['address_type'])) {
            $addressList = UserAddressModel::where($map)->get();
        }

        if(!empty($addressList) && is_array($addressList)) {
            $region = array();
            foreach ($addressList as &$val) {
                $region = RegionModel::whereIn('region_id', [$val->province, $val->city, $val->district])
                        ->select('region_id', 'region_name')
                        ->get();

                foreach ($region as $v) {
                    $address[$v->region_id] = $v->region_name;
                }

                $val->province_txt = $address[$val->province];
                $val->city_txt     = $address[$val->city];
                $val->district_txt = $address[$val->district];

                // 检查港台电话code
                if ($val->intl_code && $val->intl_code != '0086') $val->mobile = $val->intl_code.'+'.$val->mobile;
            }
        }

        $data['list'] = $addressList;
        $data['isaction'] = $request->input('isaction');

        return view('ajax_list', $data); 
    }

    //设置默认地址
    public function set_default(Request $request)
    {
        if ($request->isMethod('post')) {
            $data['user_id']     = $request->input('user_id');
            $data['address_id']  = $request->input('address_id');
            $data['operator_id'] = $request->user->userId;

            $url = Config('website.api_domain').'address/setdefault';

            $data['k1'] = time();
            $data['k2'] = md5(md5($data['k1']).'fh6y5t4rr351d2c3bryi');
            $data['pf'] = 4;
    
            $temp = json_decode(curlApi($url, $data, "POST"), true);

            return ['errcode' => $temp['err_code'], 'errmsg' => $temp['err_msg']];
        }
    }

    // 删除地址
    public function delete(Request $request) 
    {
        if ($request->isMethod('post')) {
            $data['user_id']     = $request->input('user_id');
            $data['address_id']  = $request->input('address_id');
            $data['operator_id'] = $request->user->userId;

            $url = Config('website.api_domain').'address/delete';

            $data['k1'] = time();
            $data['k2'] = md5(md5($data['k1']).'fh6y5t4rr351d2c3bryi');
            $data['pf'] = 4;
    
            $temp = json_decode(curlApi($url, $data, "POST"), true);

            return ['errcode' => $temp['err_code'], 'errmsg' => $temp['err_msg']];
        }
    }
}