import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/model/user/adress_model.dart';
import 'package:aku_new_community/model/user/province_model.dart';
import 'package:aku_new_community/pages/personal/user_func.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/utils/hive_store.dart';
import 'package:aku_new_community/utils/text_utils.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/picker/bee_city_picker.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:get/get.dart';

import 'address_selector.dart';
import 'editView.dart';

class NewAddressPage extends StatefulWidget {
  final bool? isFirstAdd;
  final AddressModel? addressModel;
  final EasyRefreshController? refreshController;

  NewAddressPage(
      {Key? key, this.isFirstAdd, this.addressModel, this.refreshController})
      : super(key: key);

  @override
  _NewAddressPageState createState() => _NewAddressPageState();
}

class _NewAddressPageState extends State<NewAddressPage> {
  EasyRefreshController _refreshController = EasyRefreshController();
  late AddressModel _address = AddressModel.empty();
  late List<ProvinceModel> _cityJsonModels = [];
  late StateSetter _addressStateSetter;
  bool isDefault = false;

  @override
  void initState() {
    super.initState();
    if (widget.addressModel != null) {
      _address = widget.addressModel!;
    }
  }

  @override
  Widget build(BuildContext context) {
    return BeeScaffold(
      title: widget.addressModel == null ? '新建收货地址' : '修改收货地址',
      body: _buildBody(context),
    );
  }

  _buildBody(BuildContext context) {
    return GestureDetector(
      onTap: () {
        //FocusScope.of(context).requestFocus(new FocusNode());
      },
      child: ListView(
        children: [
          Container(
            clipBehavior: Clip.antiAlias,
            margin: EdgeInsets.all(20.w),
            padding: EdgeInsets.only(top: 10.w),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(24.w)),
            ),
            child: Column(
              children: [
                EditTile(
                  constraints: BoxConstraints.tight(Size(double.infinity, 45)),
                  title: "收货人",
                  titleStyle: TextStyle(fontSize: 28.sp, color: ktextPrimary),
                  hintStyle:
                      TextStyle(fontSize: 28.sp, color: Color(0xFFBBBBBB)),
                  textStyle: TextStyle(fontSize: 28.sp, color: ktextSubColor),
                  value: _address.name ?? '',
                  hint: "请填写收货人姓名",
                  textChanged: (value) {
                    _address.name = value;
                  },
                ),
                Container(
                    height: 2.w,
                    color: Color(0xFFD9D9D9),
                    margin: EdgeInsets.symmetric(horizontal: 24.w)),
                EditTile(
                  constraints:
                      BoxConstraints.tight(Size(double.infinity, 100.w)),
                  title: "手机号码",
                  titleStyle: TextStyle(fontSize: 28.sp, color: ktextPrimary),
                  hintStyle:
                      TextStyle(fontSize: 28.sp, color: Color(0xFFBBBBBB)),
                  textStyle: TextStyle(fontSize: 28.sp, color: ktextSubColor),
                  value: _address.tel ?? '',
                  hint: "请填写收货人手机号码",
                  maxLength: 11,
                  textChanged: (value) {
                    _address.tel = value;
                  },
                ),
                Container(
                    height: 2.w,
                    color: Color(0xFFD9D9D9),
                    margin: EdgeInsets.symmetric(horizontal: 24.w)),
                _addressView(),
                Container(
                    height: 2.w,
                    color: Color(0xFFD9D9D9),
                    margin: EdgeInsets.symmetric(horizontal: 24.w)),
                Container(
                  height: 20.w,
                ),
                EditTile(
                  title: "详细地址",
                  hint: "街道门牌号等",
                  titleStyle: TextStyle(fontSize: 28.sp, color: ktextPrimary),
                  hintStyle:
                      TextStyle(fontSize: 28.sp, color: Color(0xFFBBBBBB)),
                  textStyle: TextStyle(fontSize: 28.sp, color: ktextSubColor),
                  value: _address.addressDetail ?? '',
                  maxLength: 100,
                  maxLines: 3,
                  direction: Axis.vertical,
                  constraints: BoxConstraints(maxHeight: 100),
                  textChanged: (value) {
                    _address.addressDetail = value;
                  },
                ),
                Container(
                    height: 2.w,
                    color: Color(0xFFD9D9D9),
                    margin: EdgeInsets.symmetric(horizontal: 24.w)),
                Container(
                  height: 30.w,
                ),
              ],
            ),
          ),
          _defaultAddressTile(),
          // _defaultAddressTile(),
          Container(
            height: 100,
          ),
          _saveButton(context)
        ],
      ),
    );
  }

  Container _saveButton(BuildContext context) {
    return Container(
      margin: EdgeInsets.symmetric(horizontal: 100.w),
      child: GestureDetector(
        onTap: () {
          _saveAddress(context);
        },
        child: Container(
          alignment: Alignment.center,
          decoration: BoxDecoration(
            color: Colors.red,
            borderRadius: BorderRadius.horizontal(
                left: Radius.circular(40.w), right: Radius.circular(40.w)),
          ),
          height: 80.w,
          padding: EdgeInsets.symmetric(vertical: 8.w),
          child: Text(
            "保存并使用",
            style: TextStyle(
              color: Colors.white,
              fontSize: 28.sp,
            ),
          ),
        ),
      ),
    );
  }

  _addressView() {
    return StatefulBuilder(
      builder: (BuildContext context, StateSetter setSta) {
        _addressStateSetter = setSta;
        return GestureDetector(
          onTap: () async {
            // if (_cityJsonModels.isEmpty) {
            //   await getCityList();
            // }
            var _city = await BeeCityPicker.pick(context);
            if (_city != null) {
              _address.locationName = _city.address;
              _address.location = _city.id;
              _address.province = _city.province.name;
              _address.city = _city.city.name;
              _address.district = _city.district.name;
              setState(() {});
            }
          },
          child: Container(
            padding: EdgeInsets.symmetric(vertical: 30.w, horizontal: 24.w),
            child: Row(
              children: <Widget>[
                Container(
                  width: 120.w,
                  child: Text("所在地区",
                      style: TextStyle(fontSize: 28.sp, color: ktextPrimary)),
                ),
                Expanded(
                    child: Text(
                  TextUtils.isEmpty(_address.locationName ?? '')
                      ? "选择地址"
                      : "${_address.locationName}",
                  textAlign: TextAlign.end,
                  style: TextStyle(fontSize: 28.sp, color: Color(0xFFBBBBBB)),
                )),
                Icon(
                  Icons.navigate_next,
                  size: 40.w,
                  color: ktextThirdColor,
                )
              ],
            ),
          ),
        );
      },
    );
  }

  /// 弹出地址选择
  _selectAddress(BuildContext context) {
    AddressSelectorHelper.show(context,
        models: _cityJsonModels,
        province: _address.province,
        city: _address.city,
        district: _address.district, callback:
            (String province, String city, String district, int? locationId) {
      _address.province = province;
      _address.city = city;
      _address.district = district;
      _address.locationName = province + city + district;
      _address.location = locationId ?? null;
      _addressStateSetter(() {});
      print("$province - $city -$district");
    });
  }

  Future<bool> getCityList() async {
    _cityJsonModels = await (HiveStore.appBox?.get('cityList') ?? [])
        .cast<ProvinceModel>()
        .toList();
    return true;
  }

  /// 保存地址
  _saveAddress(BuildContext context) async {
    if (TextUtils.isEmpty(_address.name ?? "")) {
      BotToast.showText(text: '收货人不能为空');
      return;
    }

    if (TextUtils.isEmpty(_address.tel ?? '') ||
        !TextUtils.verifyPhone(_address.tel)) {
      BotToast.showText(text: '手机号格式不正确');
      return;
    }

    if (_address.location == null) {
      BotToast.showText(text: '所在地区不能为空');
      return;
    }

    if (TextUtils.isEmpty(_address.addressDetail ?? '')) {
      BotToast.showText(text: '详细地址不能为空');
      return;
    }

    if (_address.id == null) {
      Userfunc.insertAddress(
          _address.name ?? '',
          _address.tel ?? '',
          _address.location ?? null,
          _address.addressDetail ?? '',
          _address.isDefault ?? null);
    } else {
      Userfunc.updateAddress(
          _address.id!,
          _address.name ?? '',
          _address.tel ?? '',
          _address.location ?? null,
          _address.addressDetail ?? '',
          _address.isDefault ?? null);
    }

    //Navigator.maybePop<dynamic>(context, _address);
    Get.back(result: true);
  }

  _defaultAddressTile() {
    if (widget.isFirstAdd != null) if (_address.isDefault == 1) {
      isDefault = true;
    } else {
      isDefault = false;
      widget.isFirstAdd! ? _address.isDefault = 1 : _address.isDefault = 0;
    }

    return Container(
      clipBehavior: Clip.antiAlias,
      margin: EdgeInsets.all(20.w),
      padding:
          EdgeInsets.only(top: 24.w, bottom: 24.w, left: 24.w, right: 24.w),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.all(Radius.circular(24.w)),
      ),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.start,
        children: [
          Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              '设置为默认地址'.text.size(28.sp).color(ktextPrimary).make(),
              5.hb,
              '提醒:每次下单会默认推荐使用该地址'
                  .text
                  .size(24.sp)
                  .color(Color(0xFFBBBBBB))
                  .make(),
            ],
          ),
          Spacer(),
          CupertinoSwitch(
              value: isDefault,
              onChanged: (value) {
                if (value) {
                  isDefault = value;
                  _address.isDefault = 1;
                  print(1);
                } else {
                  isDefault = value;
                  _address.isDefault = 0;
                  print(0);
                }
                setState(() {});
              })
        ],
      ),
    );
  }
}