// @flow

export const productDetail = 'productDetail';
export const fillInfo = 'fillInfo';
export const healthNotification = 'healthNotification';
export const payment = 'payment';
export const receipt = 'receipt';
// layout type
export const BANNER = 'banner';
export const TITLE = 'title';
export const LIST_ITEM = 'listItem';
export const CHOOSE = 'choose';
export const PRODUCT = 'product';
export const SERVICE = 'service';

const initConfig = {
  insuranceProcess: [
    productDetail,
    fillInfo,
    healthNotification,
    payment,
    receipt,
  ],
  layout: [
    {
      type: BANNER, // 组件类型
      key: BANNER, // 组件的唯一标识，用来串联 layout, rules
      uri: '', // banner需要装填数据 uri,展示的图片链接
      width: 100, //图片宽度
      height: 100, // 图片高度
    },
    {
      type: TITLE,
      key: TITLE,
      h1: '', // title需要装填数据 主标题
      h2: '', // title需要装填数据 副标题
      label: [], // 多个展示标签
      labelColor: '', //颜色
    },
    {
      type: LIST_ITEM,
      key: LIST_ITEM,
      title: {
        icon: '', //左侧icon
        h1: '', //主标题
        rightIcon: '', //右侧icon
        rightText: '', //右侧文字
        onPress: () => {
        }, //点击事件
      },
      data: [{ key: '', value: '' }],
    },
    {
      type: CHOOSE,
      key: CHOOSE,
      title: {
        icon: '', //左侧icon
        h1: '', //主标题
        rightIcon: '', //右侧icon
        rightText: '', //右侧文字
        onPress: () => {
        }, //点击事件
      },
      text: '', // 选择框显示标题
      values: [], // 选择框数据集合
      source: {}, //修改源对象
      setKey: '', //修改源对象内的属性名称
      onChange: () => {
      }, //选中事件
      onWillChange: () => {
      }, // 选中前执行事件
    },
    {
      type: PRODUCT,
      key: PRODUCT,
      uri: '',
    },
  ],
  rules: [
    {
      layoutKey: CHOOSE, // 串联 key 为 choose的组件
      range: [], // [min , max]   [a,b,c,d] 只允许包含在 a\b\c\d内
    },
  ],
}

export const BaseConfig = {
  '200000156': initConfig,
  '200000155': initConfig,
  '200000152': initConfig,
};

// 订单
export type Order = {
  oid : string, // 唯一标识
  orderno : string, // 订单号
  uid : string, // 用户id
  memberid : string, //关联关系,
  channel : string, // 渠道
  company : string, // 承保机构Id
  orderstatus : string, //订单状态
  ordertype : string, // 订单类型
  orderprem : string, // 保费，用户付出的钱 元
  orderamnt : string, // 保额，赔付的金额 元,
  strmakedate : string, // 创建时间 年 月 日
  invitecode : string, // 邀请号,
}

//支付信息
export type Payment = {
  bankcode : string, // 银行编号
  bankname : string, // 银行名称
  name : string, // 开户名
  bankaccount : string, // 银行账号
  paymode : string, // 支付方式
  payprem : string, // 支付金额
  appmobile : string, // 联系方式
  status : string, // 支付状态,
  message : string, // 支付备注
  strpaymentdate : string, // 开始支付时间
  repaymode : string, //退款方式,
  outpayflag : string, // 外部渠道标识,
}

//受益人
export type Bnf = {
  bid : string, // 受益人id
  bnftype : string, // 受益人类型  0 法定
  bnfno : string, // 受益人编号
  bnfgrade : string, //受益人级别
  relationtoinsured : string, // 与被保人关系
  bnflot : string, // 受益份额
  sequenceno : string, //显示顺序
  name : string, // 受益人名字
  gender : string, // 性别
  birthday : string, // 生日
  idtype : string, // 证件类型
  idno : string, // 证件号
  isauthentication : string, //是否认证用户,
  infrontimg : string, // 正面证件照片
  inbackimg : string, // 反面证件照
  nativeplace : string, // 籍贯
}

export type PDetail = {
  province : string, //省编号
  city : string, //市 编号
  county : string, //区/县 编号
  postaladdress : string, //详细地址
  zipcode : string, //邮编
  stature : string, //身高
  avoirdupois : string, //体重
  familyyearincome : string, //家庭收入
  salary : string, //工资
  mobile : string, //手机
  phone : string, //固定电话
}

// 用户
export type Person = {
  uid : string, //用户ID
  name : string, //用户
  gender : string, //性别,
  birthday : string, //生日
  idvalid : string, //实名认证
  cardusefuldate : string, //证件有效期
  idtype : string, //证件类型
  idno : string, //证件号
  nativeplace : string, //籍贯,
  ssflag : string, //是否有社保,
  infrontimg : string, // 证件照正面
  inbackimg : string, // 证件照反面
  currenttype : string, // 税收居民类型
  detail : PDetail, // 通讯信息
}

//健告输入
export type Customerimpart = {
  impartcode : string, // 健康告知项编号
  impartver : string, // 健康告知项版本,
  impartcontent : string, //告知内容
  impartparams : string, // 用户输入信息,
  impartexplanation : string, //输入参数,
}

// 投保人
export type Applicant = {
  aid : string, // 唯一标识
  orderId : Array<string>, // 订单ID集合
  ldperson : Person, //用户信息
  lccustomerimpart : Array<Customerimpart>, //健康告知
};

export type Insured = {
  insureId : string, // 唯一标识
  orderUUID : Array<string>, // 订单ID集合
  lcinsured : Person, //用户信息
  lccustomerimpart : Array<Customerimpart>, //健康告知
  bnfs : Array<Bnf>, //受益人
};

//险种计划，计划包含产品
export type Plan = {
  pId : string, //唯一标识
  prem : string, // 保费 元
  amnt : string, // 保额 元,
  products : Array<string>, // 保险产品ID
  contplancode : string, // 计划编号,
  contplanname : string, // 计划名称,
  mult : string, // 份数
  payintv : string, // 缴费方式 12 年缴，1月缴，0趸缴
  insuyear : string, //保障期间 106 终身,
  insuyearflag : string, // 保障期间单位   Y 年 ， A 岁,
  payendyear : string, // 缴费期间
  payendyearflag : string, // 缴费期间单位 Y 年 ， A 岁,
  hospitalbnfflag : string, // 是否有住院津贴   N;不选择Y:选择,
  livegetmode : string, //生存金领取方式
  deadgetmode : string, //身故金领取方式
  bonusgetmode : string, //红利金领取方式
  getyear : string, // 领取 年龄,
  getyearflag : string, //领取 年龄标记 符合领取年龄 ,
  getendperiod : string, // 领取年期,
  getendunit : string, //领取年期 单位,
}

// 责任
export type Duty = {
  dutycode : string, //责任编码
  prem : string, //基本保费 用户付出的
  amnt : string, //实际保额 赔付的
  getlimit : string, //免赔天数
  deductible : string, //免赔金额 元
  getrate : string, //免赔比例
}

//保险产品
export type Product = {
  productId : string, // 唯一标识
  planids : Array<string>, // 关联险种计划ID集合
  polno : string, //保单险种号码
  riskcode : string, //险种编码
  riskname : string, //险种名称
  ismainriskflag : string, //主附险标志
  payintv : string, //缴费方式  12 年缴，1月缴，0趸缴
  payendyearflag : string, //缴费期间
  payendyear : string, //缴费期间单位 Y 年 ， A 岁
  insuyearflag : string, //保险年期单位
  insuyear : string, //保险年期
  amnt : string, //保额 赔付,
  prem : string, //保费, 用户支付
  mult : string, //份数,
  getyear : string, //领取年龄
  getintv : string, //年金领取频次
  getendperiod : string, //领取期间,
  getendunit : string, //领取期间单位,
  livegetmode : string, //生存金领取方式
  deadgetmode : string, //身故金领取方式,
  bonusgetmode : string, //红利金领取方式
  calflg : string, //保额报费计算方式 G保额算保费，P 保费算保额
  pubamntflag : string, //是否公共保额 Y--是，N--否
  pubamnt : string, //公共保额
  dutys : Array<Duty>, // 责任列表
  discountsave : string, //折扣率
};


// 保单
export type Policy = {
  pid : string, //唯一标识
  order : Order, // 订单
  payment : Payment, // 支付信息
  applicant : Applicant, //投保人
  insureds : Array<Insured>, //被保人集合
  bnfs : Array<Bnf>, // 受益人
  plans : Array<Plan>, // 保险计划
  // 目前的产品，products暂时不储存数据，所有产品数据储存在计划中
  products : Array<Product>,
}

export default {};
