import 'package:flutter/material.dart';

import 'package:aku_community_manager/const/resource.dart';

enum FIX_ENUM {
  ///待派单
  HAND_OUT,

  ///已派单&&待接单
  WAIT_PICKUP,

  ///处理中
  PROCESSING,

  ///已处理
  DONE,
}

class FixModel {
  static Map<FIX_ENUM, String> managerRoleMap = {
    FIX_ENUM.HAND_OUT: '待派单',
    FIX_ENUM.WAIT_PICKUP: '已派单',
    FIX_ENUM.PROCESSING: '处理中',
    FIX_ENUM.DONE: '已处理',
  };

  static Map<FIX_ENUM, String> otherRoleMap = {
    FIX_ENUM.HAND_OUT: '',
    FIX_ENUM.WAIT_PICKUP: '待接单',
    FIX_ENUM.PROCESSING: '处理中',
    FIX_ENUM.DONE: '已处理',
  };

  String title;
  DateTime dateStart;
  FIX_ENUM type;

  ///dynamic type
  ///
  ///当img 的类型为String时渲染asset图片,当img 类型为File 时渲染File图片
  List imgs;
  FixDetailModel detail;
  FixModel({
    @required this.title,
    @required this.dateStart,
    @required this.type,
    @required this.imgs,
    @required this.detail,
  });

  static List<FixModel> initList() {
    return [
      FixModel(
        title: '小区大道路灯坏了。',
        dateStart: DateTime(2020, 10, 25, 14, 28, 56),
        type: FIX_ENUM.HAND_OUT,
        imgs: [
          R.ASSETS_STATIC_FIX_LIGHT1_PNG,
          R.ASSETS_STATIC_FIX_LIGHT2_PNG,
          R.ASSETS_STATIC_FIX_LIGHT3_PNG,
        ],
        detail: FixDetailModel(
          userName: '杨建',
          userPhoneNumber: '18882928888',
          fixArea: 'C区',
          fixStatuses: [
            FixStatus(title: '申请保修', date: DateTime(2020, 10, 23, 10, 28, 56)),
          ],
        ),
      ),
      FixModel(
        title: '小区西大门车栏坏了,请物业尽快修理更换。',
        dateStart: DateTime(2020, 10, 21, 7, 28, 56),
        type: FIX_ENUM.WAIT_PICKUP,
        imgs: [R.ASSETS_STATIC_FIX_AIR1_PNG, R.ASSETS_STATIC_FIX_AIR2_PNG],
        detail: FixDetailModel(
          userName: '杨建',
          userPhoneNumber: '18882928888',
          fixArea: 'B区',
          type: FIX_PAYMENT_TYPE.FREE,
          limit: FIX_DATE_LIMIT.HOUR_24,
          subType: FIX_SUB_TYPE.NORMAL,
          fixStatuses: [
            FixStatus(title: '申请保修', date: DateTime(2020, 10, 23, 10, 28, 56)),
            FixStatus(
                title: '分派给李保国师傅', date: DateTime(2020, 10, 23, 10, 32, 14)),
            FixStatus(title: '师傅已接单', date: DateTime(2020, 10, 23, 10, 38, 26)),
          ],
          result: FixResult(
            detail: '电饭煲插头没插',
            material: '无',
            imgs: [R.ASSETS_STATIC_FIX_FOOD_PNG],
          ),
        ),
      ),
      FixModel(
        title: '家里空调坏了,请师傅抓紧时间尽快维修。',
        dateStart: DateTime(2020, 10, 21, 7, 28, 56),
        type: FIX_ENUM.PROCESSING,
        imgs: [R.ASSETS_STATIC_FIX_AIR1_PNG, R.ASSETS_STATIC_FIX_AIR2_PNG],
        detail: FixDetailModel(
          userName: '杨建',
          userPhoneNumber: '18882929292',
          fixArea: 'A区',
          type: FIX_PAYMENT_TYPE.FREE,
          limit: FIX_DATE_LIMIT.HOUR_24,
          subType: FIX_SUB_TYPE.NORMAL,
          fixStatuses: [
            FixStatus(title: '申请保修', date: DateTime(2020, 10, 23, 10, 28, 56)),
            FixStatus(
                title: '分派给李保国师傅', date: DateTime(2020, 10, 23, 10, 32, 14)),
            FixStatus(title: '师傅已接单', date: DateTime(2020, 10, 23, 10, 38, 26)),
          ],
        ),
      ),
      FixModel(
        title: '家中电饭煲出问题了,请师傅速来。',
        dateStart: DateTime(2020, 10, 22, 9, 28, 56),
        type: FIX_ENUM.DONE,
        imgs: [R.ASSETS_STATIC_FIX_FOOD2_PNG, R.ASSETS_STATIC_FIX_FOOD_PNG],
        detail: FixDetailModel(
          userName: '杨建',
          userPhoneNumber: '18882929292',
          fixArea: 'A区',
          type: FIX_PAYMENT_TYPE.PAY,
          limit: FIX_DATE_LIMIT.HOUR_24,
          subType: FIX_SUB_TYPE.NORMAL,
          fixStatuses: [
            FixStatus(title: '申请保修', date: DateTime(2020, 10, 23, 10, 28, 56)),
            FixStatus(
                title: '分派给李保国师傅', date: DateTime(2020, 10, 23, 10, 32, 14)),
            FixStatus(title: '师傅已接单', date: DateTime(2020, 10, 23, 10, 38, 26)),
            FixStatus(title: '处理完成', date: DateTime(2020, 10, 23, 11, 01, 08)),
          ],
          result: FixResult(
            detail: '电饭煲插头没插',
            material: '无',
            imgs: [R.ASSETS_STATIC_FIX_FOOD_PNG],
          ),
          review: UserReviewInfo(
            rate: 5,
            content: '师傅太用心了',
          ),
          priceDetail: FixPriceDetail(
            humanPrice: 10,
            materialPrice: 0,
          ),
        ),
      ),
    ];
  }
}

///派单类型
enum FIX_PAYMENT_TYPE {
  FREE,
  PAY,
}

Map<FIX_PAYMENT_TYPE, String> fixPaymentMap = {
  FIX_PAYMENT_TYPE.FREE: '无偿服务',
  FIX_PAYMENT_TYPE.PAY: '有偿服务',
};

Map<String, FIX_PAYMENT_TYPE> fixPaymentStringMap = {
  '无偿服务': FIX_PAYMENT_TYPE.FREE,
  '有偿服务': FIX_PAYMENT_TYPE.PAY,
};

///工单子类
enum FIX_SUB_TYPE {
  ///一般单
  NORMAL,

  ///加急单
  HURRY,
}

Map<FIX_SUB_TYPE, String> fixSubTypeMap = {
  FIX_SUB_TYPE.NORMAL: '一般单',
  FIX_SUB_TYPE.HURRY: '加急单',
};

Map<String, FIX_SUB_TYPE> fixSubTypeStringMap = {
  '一般单': FIX_SUB_TYPE.NORMAL,
  '加急单': FIX_SUB_TYPE.HURRY,
};

///工单时限
enum FIX_DATE_LIMIT {
  HOUR_24,
  HOUR_12,
  HOUR_8,
}

Map<FIX_DATE_LIMIT, String> fixDateLimitMap = {
  FIX_DATE_LIMIT.HOUR_24: '24小时内处理',
  FIX_DATE_LIMIT.HOUR_12: '12小时内处理',
  FIX_DATE_LIMIT.HOUR_8: '8小时内处理',
};

Map<String, FIX_DATE_LIMIT> fixDateLimitStringMap = {
  '24小时内处理': FIX_DATE_LIMIT.HOUR_24,
  '12小时内处理': FIX_DATE_LIMIT.HOUR_12,
  '8小时内处理': FIX_DATE_LIMIT.HOUR_8,
};

class FixDetailModel {
  ///报修人
  String userName;

  String userPhoneNumber;

  String fixArea;

  FIX_PAYMENT_TYPE type;

  FIX_DATE_LIMIT limit;

  FIX_SUB_TYPE subType;

  List<FixStatus> fixStatuses;

  FixResult result;

  UserReviewInfo review;

  FixPriceDetail priceDetail;
  FixDetailModel({
    this.userName,
    this.userPhoneNumber,
    this.fixArea,
    this.type,
    this.limit,
    this.subType,
    this.fixStatuses,
    this.result,
    this.review,
    this.priceDetail,
  });
}

class FixStatus {
  String title;
  DateTime date;
  FixStatus({
    this.title,
    this.date,
  });
}

class FixResult {
  String detail;
  String material;

  ///dynamic img
  List imgs;
  FixResult({
    this.detail,
    this.material,
    this.imgs,
  });
}

class UserReviewInfo {
  double rate;
  String content;
  UserReviewInfo({
    this.rate,
    this.content,
  });
}

class FixPriceDetail {
  double humanPrice;
  double materialPrice;
  FixPriceDetail({
    this.humanPrice,
    this.materialPrice,
  });
  double get allPrice => humanPrice + materialPrice;
}