import {Component, ViewChild} from '@angular/core';
import {NavController, IonicPage, Slides} from 'ionic-angular';
import {ActivityListPage} from "../../home/activity/activityList/activityList";
import {Http, Response} from '@angular/http';
import {ActivityStatisticService} from '../../../service/activityStatisticService';
import {AppService, AppGlobal} from '../../../service/appHttpService';
import {Calendar} from '@ionic-native/calendar';
import {ActivityApplyPage} from "../../home/activity/activityApply/activityApply";
import {ActivityDetailPage} from "../../home/activity/activityDetail/activityDetail";
import {OutGoingReportPage} from "../../home/report/outGoingReport/outGoingReport";
import {AnnouncementPage} from '../../home/announcement/announcementList/announcement';
import {Storage} from '@ionic/storage';
import {OutGoingReportEditPage} from "../../home/report/outGoingReportEdit/outGoingReportEdit";
import {AnnouncementViewPage} from '../../home/announcement/announcementView/announcementView';
import {MoreAppPage} from "../../home/more-app/more-app";
import {ReportTrackPage} from "../../home/report/reportTrack/reportTrack";
import {CalendarComponentOptions, DayConfig} from "ion2-calendar";
import {NoticePage} from "../notice/notice";
import {monthCh, weekDay} from "../../../app/main";
import {Badge} from '@ionic-native/badge';
import {LearningListPage} from "../../home/learning/learning-list/learning-list";
import {TabsService} from "../tabs.service";

declare var Swiper;

@IonicPage()
@Component({
    selector: 'page-home',
    templateUrl: 'home.html'
})

export class HomePage {
    @ViewChild(Slides) slides: Slides;

    hasNewActivity: number = 0;
    hasNewNotice: number = 0;
    hasNewPremanager: number = 0;
    hasNewMessage: number = 0;

    //日历
    date: string;
    type: 'string';

    optionsMulti: CalendarComponentOptions;
    newArr: DayConfig[] = [];

    //待出行
    waitgoCount = '0';
    //待确认
    waitsureCount = '0';
    //未读通知
    NoticeNotreadCount = '0';
    //尚未报备
    PremanagerNotdoCount = '0';
    //是否显示正在开发中
    isWait: boolean = false;

    slidersItems = [];
    noticeList = [];

    picture: string = AppGlobal.picture;

    operations: Array<string>;

    //当前年份
    year;
    //当前月份
    month;
    //当前第几周
    weekNo;

    noticeTips;
    role;

    constructor(public navCtrl: NavController, public activityStatisticService: ActivityStatisticService,
                public appService: AppService, public http: Http, private calendar: Calendar, public storage: Storage,
                public badge: Badge, public tabsSer: TabsService) {

    }

    ngOnInit(): void {
        this.appService.ObserverHttpGet("/wisdomgroup/modules/message/findAllActivityForAppWithXQ", null).subscribe((res: Response) => {
            this.noticeList = res.json().slice(0, 2);
        }, error => {
            this.appService.alert('系统错误！');
        });
    }

    ionViewDidEnter() {
        //获取权限
        this.getRole();
        //获取消息数量
        this.getNewCount();
        //获取日历
        this.getCalendar();
    }

    ionViewWillEnter() {
        this.slidersItems = [];
        //初始化日期
        this.getHasNewActivity();
        this.getHasNewNotice();
        this.getHasNewMessage();
        this.getHasNewPremanager();
        //统计待进行和待确认活动数目
        this.activityStatisticService.myActivityOrderCount((data) => {
            this.waitgoCount = data.waitgoOrder;
            this.waitsureCount = data.waitSureOrder;
        });

        this.appService.ObserverHttpGet("/wisdomgroup/modules/common/file/getBanner", {}).subscribe((res: Response) => {
            this.slidersItems = res.json();
        }, error => {
        })

        //初始化统计未读通知
        this.activityStatisticService.myNoticeNotreadCount((data) => {
            this.NoticeNotreadCount = data;
        });
        //初始化统计尚未报备
        this.activityStatisticService.myNotdoPremanagerCount((data) => {
            this.PremanagerNotdoCount = data;
        });

        //初始化操作记录
    }

    ionViewDidLeave() {
        this.newArr = [];
        if (this.slides) {
            this.slides.stopAutoplay();
        }
    }


    //获取权限
    getRole() {
        this.tabsSer.getRoles().subscribe(
            (res) => {
                this.role = res
            },
            error => {
                this.appService.alert('系统错误！');
            }
        )
    }

    wait() {
        this.isWait = true;
    }

    cancleWait() {
        this.isWait = false;
    }


    go(item) {
        if (item.type == 1) {
            this.getActivity(item.id);
        } else if (item.type == 2) {
            this.getPremanager(item.id);
        } else if (item.type == 3) {
            this.navCtrl.push("AnnouncementViewPage", {
                id: item.id
            });
        }
    }

    //获取活动ById
    getActivity(id) {
        this.appService.ObserverHttpPost("/wisdomgroup/modules/activity/appFindById", {id: id})
            .toPromise()
            .then(res => {
                let activity = res.json();
                this.navCtrl.push('ActivityDetailPage', {id: activity.id});
            })
            .catch(error => {
            });
    }


    //获取报备
    getPremanager(id) {
        this.storage.remove("temp_userpre");
        this.storage.remove("managerId");
        this.storage.remove("city");
        this.storage.remove("cityList");
        this.storage.remove("person");
        this.appService.ObserverHttpPost("/wisdomgroup/modules/premanager/findById", {id: id}).subscribe((res) => {
            let premanager = res.json();
            this.storage.set("premanager", premanager);
            this.navCtrl.push("OutGoingReportEditPage");
        })
    }

    //消息通知
    gotoNotice() {
        this.navCtrl.setRoot(NoticePage);
        this.navCtrl.parent.select(2);
    }

    //外出报备跳转
    goOutGoingReportAboutAll() {
        this.navCtrl.push("OutGoingReportPage", {
            type: 1
        });
    }

    //前往
    goTo(page) {
        this.navCtrl.push(page);
    }


    //获取是否有新的活动
    getHasNewActivity() {
        this.appService.ObserverHttpGet("/wisdomgroup/modules/activity/hasNewActivity", null)
            .subscribe((res: Response) => {
                    let data = res.json();
                    this.hasNewActivity = data;
                }, error => {
                }
            );
    }

    //获取是否有新的公告
    getHasNewNotice() {
        this.appService.ObserverHttpGet("/wisdomgroup/modules/notice/hasNewNotice", null)
            .subscribe((res: Response) => {
                    let data = res.json();
                    this.hasNewNotice = data;
                }, error => {
                }
            );
    }

    //获取是否有新消息
    getHasNewMessage() {
        this.appService.ObserverHttpGet("/wisdomgroup/modules/message/hasNewMessage", null)
            .subscribe((res: Response) => {
                    let data = res.json();
                    this.hasNewMessage = data;
                }, error => {
                }
            );
    }

    //获取是否有新的报备
    getHasNewPremanager() {
        this.appService.ObserverHttpGet("/wisdomgroup/modules/premanager/hasNewPremanager", null)
            .subscribe((res: Response) => {
                    let data = res.json();
                    this.hasNewPremanager = data;
                }, error => {
                }
            );
    }

    getNewCount() {
        this.appService.ObserverHttpGetData('/wisdomgroup/modules/activity/hasNewCount', null)
            .subscribe((res) => {
                let data = Number(res.json());
                this.noticeTips = data;
                if (data > 0) {
                    this.badge.set(data);
                } else {
                    this.badge.clear();
                }
            })
    }

    //日历

    getCalendar() {
        this.newArr = [];
        let date = new Date();
        let year = date.getFullYear();
        let month = date.getMonth() + 1;

        //2.参加活动日期
        this.tabsSer.appOrderCal().subscribe(
            (order)=>{
                order.forEach(event => {
                    this.newArr.push({
                        date: new Date(event.batch.batchGoDate),
                        disable: true,
                        cssClass: 'dayOff2'
                    })
                });

                this.tabsSer.appPreCal().subscribe(
                    (pre)=>{
                        pre.forEach(event => {
                            this.newArr.push({
                                date: new Date(event.formshTime),
                                disable: true,
                                cssClass: 'dayOff4'
                            })
                        });

                        this.loadEvent(year, month);
                    }
                )
            }
        );
    }

    loadEvent(year, month) {
        //5.获取每月值班信息
        const data = {
            date: year + '/' + month + '/01'
        };
        this.tabsSer.getMyScheduleOnMonth(data).subscribe(
            (schedule)=>{
                for (let i = 0; i < schedule.length; i++) {
                    const ev = {
                        date: new Date(schedule[i].dutyDate),
                        disable: true,
                        cssClass: 'dayOff3'
                    };
                    this.newArr.push(ev);
                }
                this.tabsSer.getFestivalAboutMonth(data).subscribe(
                    (festival)=>{
                        festival.forEach(event => {
                            const data = {
                                date: new Date(event.date),
                                disable: true,
                                cssClass: 'dayOff1'
                            };
                            this.newArr.push(data);
                        });
                        this.setCalendar(year, month);
                    }
                )
            }
        )

    }

    setCalendar(year, month) {
        let date = new Date();
        //4.每月的周末
        let d = new Date(year, month, 0).getDate();
        for (let i = 1; i < d + 1; i++) {
            date.setFullYear(year, month - 1, i);
            let day = date.getDay();
            if (day == 6 || day == 0) {
                const data = {
                    date: new Date(year, month - 1, i),
                    disable: true,
                    cssClass: 'dayOff1'
                };
                this.newArr.push(data);
            }
        }

        this.optionsMulti = {
            pickMode: 'multi',
            monthFormat: 'YYYY 年 MM 月 ',
            weekdays: weekDay,
            monthPickerFormat: monthCh,
            weekStart: 0,
            disableWeeks: [0, 1, 2, 3, 4, 5, 6],
            daysConfig: this.newArr
        };
    }

    onChange(e) {
    }

    //月份改变
    monChange(e) {
        this.loadEvent(e.newMonth.years, e.newMonth.months);
    }

}

//定义星期实体
export class Week {
    id: number;
    title: string;
    date: number;
    isToday: boolean = false;
}
