/**
 * Created by cuppi on 2016/11/29.
 */
'use strict';
import JNetwork from './JNetwork';
import {cinemaUrl} from '../unify/JUrlList';
import DateTool from '../tool/JToolDate';
import _ from '../unify/JDataUnify';
import SeatManager from '../util/JManagerSeat';
import CinemaFilterParas from "../paras/CinemaFilterParas";
import JNetworkRoot from './JNetworkRoot';

/**
 * 影院接口
 * @memberOf module:network
 */
class JNetworkCinema extends JNetworkRoot{
  /**
   * 获取影院详情
   * @param {string} cinemaId 影院ID
   * @returns {Promise} promise
   */
  cinemaDetail(cinemaId) {
    return new Promise((resolve, reject) => {
      this.prefixPromise(cinemaUrl.jbzDetail, {cinemaId}).then(data => {
        resolve(_('cinemaUrl.jbzDetail', data, 0));
      }, error => {
        reject(error);
      });
    });
  }

  /**
   * 影院列表
   * @param {} location
   * @param {cinemaFilter} CinemaFilterParas
   * @returns {Promise}
   */
  cinemaList(location: any, cinemaFilter: CinemaFilterParas);
  cinemaList(cinemaFilter: CinemaFilterParas);
  cinemaList(location: any, cinemaFilter?: any){
    if (cinemaFilter == undefined){
      cinemaFilter = location;
    }
    return new Promise((resolve, reject) => {
      let u = undefined;
      let {filmId, feature, region, sort, limit} = cinemaFilter ? cinemaFilter : {filmId: u, feature: u, region: u, sort: u, limit: u};
      this.prefixPromise(cinemaUrl.jbzList, {
        ...location,
        filmId,
        feature,
        regionName: region,
        orderType: sort,
        limit
      }).then(data => {
        resolve(_('cinemaUrl.jbzList', data));
      }, error => {
        reject(error);
      });
    });
  }

  /**
   * 获取指定影院排片
   * @param cinemaId 影院Id
   * @returns {{terminate, then}|*}
   */
  cinemaScreeningFilmList(cinemaId) {
    return new Promise((resolve, reject) => {
      return this.prefixPromise(cinemaUrl.jbzScreeningFilmList, {
        cinemaId
      }).then(data => {
        resolve(_('cinemaUrl.jbzScreeningFilmList', data));
      }, error => {
        reject(error);
      });
    });
  }

  /**
   * 获取指定影院排片日期安排
   * @param cinemaId 影院Id
   * @param filmId 影片Id
   * @returns {{terminate, then}|*}
   */
  cinemaScreeningDateList(cinemaId, filmId) {
    return new Promise((resolve, reject) => {
      this.prefixPromise(cinemaUrl.jbzScreeningDateList, {cinemaId, filmId}).then(data => {
        resolve(_('cinemaUrl.jbzScreeningDateList', data));
      }, error => {
        reject(error);
      });
    });
  }

  /**
   * 获取指定影院排片放映厅安排
   * @param cinemaId 影院Id
   * @param filmId 影片Id
   * @param date 日期（时间戳标示）
   * @returns {{terminate, then}|*}
   */
  cinemaScreeningItems(cinemaId, filmId, date) {
    return new Promise((resolve, reject) => {
      date = DateTool.dateStringFromTimeInterval(date, 'yyyy-MM-dd');
      this.prefixPromise(cinemaUrl.jbzScreeningItems, {cinemaId, filmId, date}).then(data => {
        resolve(_('cinemaUrl.jbzScreeningItems', data));
      }, error => {
        reject(error);
      });
    });
  };

  /**
   * 实时座位图
   * @param type 平台类型 （必须）
   * @param paras （根据不同平台变化）
   * @returns {*}
   */
  cinemaSeats(type, paras) {
    if (type === 'meituan' || type === 'dazhong') {
      type = 'maoyan';
    }
    return new Promise((resolve, reject) => {
      this.prefixPromise(cinemaUrl.jbzRealtimeSeat, {type, ...paras}).then(data => {
        resolve(_('cinemaUrl.jbzRealtimeSeat', data));
      }, error => {
        reject(error);
      });
    });
  }

  /**
   * 智能实时座位图
   * @param type 平台类型 （必须）
   * @param paras （根据不同平台变化）
   * @returns {*}
   */
  cinemaSmartSeats(type, paras) {
    if (type === 'meituan' || type === 'dazhong') {
      type = 'maoyan';
    }
    return new Promise((resolve, reject) => {
      this.prefixPromise(cinemaUrl.jbzRealtimeSeat, {type, ...paras}).then(data => {
        resolve(SeatManager.defaultManager().smartSeatsFromSeats(type, _('cinemaUrl.jbzRealtimeSmartSeat', data)));
      }, error => {
        reject(error);
      });
    });
  }

  /**
   * 收藏影院
   * @param cinemaId 影院Id
   * @param cinemaName 影院名字
   * @returns {{terminate, then}|*}
   */
  cinemaFavoriteCinema(cinemaId, cinemaName) {
    return this.prefixPromise(cinemaUrl.jbzCollectcinema, {
      cinemaId: cinemaId,
      cinemaName: cinemaName
    });
  }

  /**
   * 取消收藏影院
   * @param cinemaId 影院Id
   * @returns {{terminate, then}|*}
   */
  cinemaCancelFavoriteCinema(cinemaId) {
    return this.prefixPromise(cinemaUrl.jbzCancelcollectcinema, {
    });
  }

  static cinemaDetail(cinemaId) {
    return this.instance().cinemaDetail(cinemaId);
  }

  static cinemaList(cinemaFilter: CinemaFilterParas);
  static cinemaList(location: any, cinemaFilter: CinemaFilterParas);
  static cinemaList(a: any, b?: any) {
    return this.instance().cinemaList(a, b);
  }

  static cinemaScreeningFilmList(cinemaId) {
    return this.instance().cinemaScreeningFilmList(cinemaId);
  }

  static cinemaScreeningDateList(cinemaId, filmId) {
    return this.instance().cinemaScreeningDateList(cinemaId, filmId);
  }

  static cinemaScreeningItems(cinemaId, filmId, date) {
    return this.instance().cinemaScreeningItems(cinemaId, filmId, date);
  };

  static cinemaSeats(type, paras) {
    return this.instance().cinemaSeats(type, paras);
  }

  static cinemaSmartSeats(type, paras) {
    return this.instance().cinemaSmartSeats(type, paras);
  }

  static cinemaFavoriteCinema(cinemaId, cinemaName) {
    return this.instance().cinemaFavoriteCinema(cinemaId, cinemaName);
  }

  static cinemaCancelFavoriteCinema(cinemaId) {
    return this.instance().cinemaCancelFavoriteCinema(cinemaId);
  }
}

export default JNetworkCinema;
