// [z-paging]loading相关模块
import u from '.././z-paging-utils'
import Enum from '.././z-paging-enum'

export default {
	props: {
		// 第一次加载后自动隐藏loading slot，默认为是
		autoHideLoadingAfterFirstLoaded: {
			type: Boolean,
			default: u.gc('autoHideLoadingAfterFirstLoaded', true)
		},
		// loading slot是否铺满屏幕并固定，默认为否
		loadingFullFixed: {
			type: Boolean,
			default: u.gc('loadingFullFixed', false)
		},
		// 是否自动显示系统Loading：即uni.showLoading，若开启则将在刷新列表时(调用reload、refresh时)显示，下拉刷新和滚动到底部加载更多不会显示，默认为false。
		autoShowSystemLoading: {
			type: Boolean,
			default: u.gc('autoShowSystemLoading', false)
		},
		// 显示系统Loading时是否显示透明蒙层，防止触摸穿透，默认为是(H5、App、微信小程序、百度小程序有效)
		systemLoadingMask: {
			type: Boolean,
			default: u.gc('systemLoadingMask', true)
		},
		// 显示系统Loading时显示的文字，默认为"加载中"
		systemLoadingText: {
			type: [String, Object],
			default: u.gc('systemLoadingText', null)
		},
	},
	data() {
		return {
			loading: false,
			loadingForNow: false,
		}
	},
	watch: {
		// loading状态
		loadingStatus(newVal) {
			this.$emit('loadingStatusChange', newVal);
			this.$nextTick(() => {
				this.loadingStatusAfterRender = newVal;
			})
			if (this.useChatRecordMode) {
				if (this.isFirstPage && (newVal === Enum.More.NoMore || newVal === Enum.More.Fail)) {
					this.isFirstPageAndNoMore = true;
					return;
				}
			}
			this.isFirstPageAndNoMore = false;
		},
		loading(newVal){
			if (newVal) {
				this.loadingForNow = newVal;
			}
		},
	},
	computed: {
		// 是否显示loading
		showLoading() {
			if (this.firstPageLoaded || !this.loading || !this.loadingForNow) return false;
			if (this.finalShowSystemLoading) {
				// 显示系统loading
				uni.showLoading({
					title: this.finalSystemLoadingText,
					mask: this.systemLoadingMask
				})
			}
			return this.autoHideLoadingAfterFirstLoaded ? (this.fromEmptyViewReload ? true : !this.pagingLoaded) : this.loadingType === Enum.LoadingType.Refresher;
		},
		// 最终的是否显示系统loading
		finalShowSystemLoading() {
			return this.autoShowSystemLoading && this.loadingType === Enum.LoadingType.Refresher;
		}
	},
	methods: {
		// 处理开始加载更多状态
		_startLoading(isReload = false) {
			if ((this.showLoadingMoreWhenReload && !this.isUserPullDown) || !isReload) {
				this.loadingStatus = Enum.More.Loading;
			}
			this.loading = true;
		},
		// 停止系统loading和refresh
		_endSystemLoadingAndRefresh(){
			this.finalShowSystemLoading && uni.hideLoading();
			!this.useCustomRefresher && uni.stopPullDownRefresh();
			// #ifdef APP-NVUE
			this.usePageScroll && uni.stopPullDownRefresh();
			// #endif
		}
	}
}
