import { Client } from './Client';
import 'mocha';
import { PinusWSClient } from 'pinus-robot-plugin';
import { expect } from 'chai';
import { checkSuccessResponse } from './CheckPatten';
import { BLOCK_OPEATE, RANK_TYPE } from '../app/consts';

describe('排行榜测试', function() {

  let pinusClient: PinusWSClient;
  let roleInfo;

  before(function(done) {
    const c = new Client();
    const timer = setInterval(() => {
      if (c.client) {
        pinusClient = c.client;
        roleInfo = c.roleInfo;
        clearInterval(timer);
        done();
      }
    }, 500);
  });

  after(function(done) {
    pinusClient.disconnect();
    // disconnect 后等待 500ms，供服务器清理环境、退出频道等
    setTimeout(() => {
      done();
    }, 500);
  });

  // it('获取排行榜总览页面', function(done) {
  //   pinusClient.request('role.rankHandler.getGeneralRank', { } , (res) => {
  //     checkSuccessResponse(res);
  //     expect(res.data.role).to.be.an('array');
  //     res.data.role.forEach(data=> {
  //       expect(data.type).to.be.a('number');
  //       expect(data.roleId).to.be.a('string');
  //       expect(data.roleName).to.be.a('string');
  //       expect(data.head).to.be.a('number');
  //       expect(data.frame).to.be.a('number');
  //       expect(data.spine).to.be.a('number');
  //       expect(data.lv).to.be.a('number');
  //       expect(data.guildName).to.be.a('string');
  //       expect(data.ce).to.be.a('number');
  //       expect(data.num).to.be.a('number');
  //       expect(data.received).to.be.a('array');
  //       data.received.forEach(id=> {
  //         expect(id).to.be.a('number');
  //       })
  //     })
  //     expect(res.data.battle).to.be.an('array');
  //     res.data.battle.forEach(data=> {
  //       expect(data.type).to.be.a('number');
  //       expect(data.roleId).to.be.a('string');
  //       expect(data.roleName).to.be.a('string');
  //       expect(data.guildName).to.be.a('string');
  //       expect(data.hid).to.be.a('number');
  //       expect(data.skinId).to.be.a('number');
  //       expect(data.num).to.be.a('number');
  //       expect(data.received).to.be.a('array');
  //       data.received.forEach(id=> {
  //         expect(id).to.be.a('number');
  //       })
  //     })
  //   });
  //   done();
  // });

  // it('获取玩家最强阵容排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.TOP_LINTUP } , (res) => {
  //     checkParamWithLineup(res);
  //     done();
  //   });
  // });

  // it('获取玩家最强武将排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.TOP_HERO } , (res) => {
  //     checkParamWithLineup(res);
  //     done();
  //   });
  // });

  // it('获取玩家武将数量排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.HERO_NUM } , (res) => {
  //     checkParam(res);
  //     done();
  //   });
  // });

  // it('获取玩家主公等级排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.USER_LV } , (res) => {
  //     checkParam(res);
  //     done();
  //   });
  // });

  // it('获取玩家总战力排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.SUM_CE } , (res) => {
  //     checkParam(res);
  //     done();
  //   });
  // });

  // it('获取镇念塔排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.TOWER } , (res) => {
  //     checkParam(res);
  //     done();
  //   });
  // });

  // it('获取秘境排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.DUNGEON } , (res) => {
  //     checkParamWithLineup(res);
  //     done();
  //   });
  // });

  // it('获取主线排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.MAIN } , (res) => {
  //     checkParam(res);
  //     done();
  //   });
  // });

  // it('获取精英排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getRank', { type: RANK_TYPE.MAIN_ELITE } , (res) => {
  //     checkParam(res);
  //     done();
  //   });
  // });

  // it('获取军团排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getGuildRank', { type: RANK_TYPE.GUILD_LV } , (res) => {
  //     checkGuildParam(res);
  //     done();
  //   });
  // });

  // it('获取军团活跃排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getGuildRank', { type: RANK_TYPE.GUILD_ACTIVE } , (res) => {
  //     checkGuildParam(res);
  //     done();
  //   });
  // });


  // it('获取武将排行榜', function(done) {
  //   pinusClient.request('role.rankHandler.getHeroRank', { type: RANK_TYPE.HERO, hid: 19 } , (res) => {
  //     checkParamWithLineupAndHero(res);
  //     done();
  //   });
  // });
});


function checkParamWithLineupAndHero(res) {
  checkSuccessResponse(res);
  expect(res.data.type).to.be.a('number');
  expect(res.data.ranks).to.be.a('array');
  res.data.ranks.forEach(cur => {
    checkRankParamWithLineupAndHero(cur);
  })
}
function checkGuildParam(res) {
  checkSuccessResponse(res);
  expect(res.data.type).to.be.a('number');
  expect(res.data.ranks).to.be.a('array');
  expect(res.data.myRank).to.be.an('object');
  checkGuildRankParam(res.data.myRank);
  res.data.ranks.forEach(cur => {
    checkGuildRankParam(cur);
  })
}

function checkParam(res) {
  checkSuccessResponse(res);
  expect(res.data.type).to.be.a('number');
  expect(res.data.ranks).to.be.a('array');
  expect(res.data.myRank).to.be.an('object');
  checkBasicParam(res.data.myRank);
  res.data.ranks.forEach(cur => {
    checkBasicParam(cur);
  })
}

function checkParamWithLineup(res) {
  checkSuccessResponse(res);
  expect(res.data.type).to.be.a('number');
  expect(res.data.ranks).to.be.a('array');
  expect(res.data.myRank).to.be.an('object');
  checkRankParamWithLineup(res.data.myRank);
  res.data.ranks.forEach(cur => {
    checkRankParamWithLineup(cur);
  })
}

function checkRankParamWithLineup(data) {
    checkBasicParam(data);
    expect(data.lineup).to.be.a('array');
    data.lineup.forEach(cur => {
        checkLineup(cur);
    })   
}

function checkRankParamWithLineupAndHero(data) {
  checkBasicParam(data);
  expect(data.lineup).to.be.a('array');
  data.lineup.forEach(cur => {
      checkLineup(cur);
  });
  data.hero.forEach(cur => {
      checkLineup(cur);
  });
}

function checkBasicParam(data) {
    expect(data.rank).to.be.a('number');
    expect(data.num).to.be.a('number');
    expect(data.roleId).to.be.a('string');
    expect(data.roleName).to.be.a('string');
    expect(data.head).to.be.a('number');
    expect(data.frame).to.be.a('number');
    expect(data.spine).to.be.a('number');
    expect(data.lv).to.be.a('number');
    expect(data.guildName).to.be.a('string');
    expect(data.ce).to.be.a('number');
}

function checkLineup(hero) {
    expect(hero.hid).to.be.a('number');
    expect(hero.star).to.be.a('number');
    expect(hero.colorStar).to.be.a('number');
    expect(hero.lv).to.be.a('number');
    expect(hero.quality).to.be.a('number');
    expect(hero.job).to.be.a('number');
}


function checkGuildRankParam(data) {
  expect(data.rank).to.be.a('number');
  expect(data.num).to.be.a('number');
  expect(data.code).to.be.a('string');
  expect(data.name).to.be.a('string');
  expect(data.icon).to.be.a('number');
  expect(data.lv).to.be.a('number');
  expect(data.memberCnt).to.be.a('number');
  expect(data.leader).to.be.a('object');
  expect(data.leader.roleId).to.be.a('string');
  expect(data.leader.roleName).to.be.a('string');
}