import {Component, OnInit} from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {HttpClient} from '@angular/common/http';
import {NzMessageService, NzModalService, NzUploadFile} from 'ng-zorro-antd';
import {Router} from '@angular/router';
import {LocalStorageService} from '../../../services/local-storage.service';
import {ADMIN_INFO_OBJECT} from '../../../services/local-storage.namespace';
import {environment} from '../../../../environments/environment';
import {CmsService} from '../../../services/cms.service';
import {CommonsService} from '../../../services/commons.service';

function getBase64(file: File): Promise<string | ArrayBuffer | null> {
    return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = () => resolve(reader.result);
        reader.onerror = error => reject(error);
    });
}

@Component({
    selector: 'app-cms-content',
    templateUrl: './cms-content.component.html',
    styleUrls: ['./cms-content.component.less']
})
export class CmsContentComponent implements OnInit {


    WEB_SERVE_URL = environment.imageUrl;
    POST_URL = environment.baseUrl;
    searchForm: FormGroup; // 搜索框
    validateForm: FormGroup; // 添加框
    requestData = []; // 列表数据
    nodes = []; // 类型树
    total: number; // 页码
    pageNum = 1; // 页码
    pageSize = 10; // 条码
    loading = true;
    editFlag = false;
    isVisible = false;
    imgFile = [];
    previewImage: string | undefined = '';
    previewVisible = false;
    id: number;
    constructor(
        private fb: FormBuilder,
        private http: HttpClient, // http请求
        private message: NzMessageService, // 信息提示
        private router: Router,
        private common: CommonsService,
        private cms: CmsService,
    ) {
        this.WEB_SERVE_URL = environment.baseUrl;
    }

    ngOnInit() {

        this.searchForm = this.fb.group({
            title: [null],
            categoryId: [null],
            platform: [null],
            status: [null],
        });

        this.validateForm = this.fb.group({
            categoryId: [null, [Validators.required]],
            title: [null, [Validators.required]],
            platform: [null],
            platformArray: [null],
            sortId: [null, [Validators.required]],
            description: [null, [Validators.required]],
            jumpType: [null],
            jumpUrl: [null],

        });

        const roleType = 1;
        this.findCategoryTree(roleType);
        this.getRequest(true, this.searchForm.value);

    }


    // 查询列表
    public getRequest(reset: boolean = false, whereObject: object) {


        if (reset) {
            this.pageNum = 1;
        }
        whereObject['pageNum'] = this.pageNum;
        whereObject['pageSize'] = this.pageSize;
        this.cms.getListContent(whereObject, data => {
            console.log(data);
            this.loading = false;
            if (data['return_code'] === '000000') {
                this.requestData = data['return_data'].list;
                this.total = data['return_data'].total;
            } else {
                this.message.error(data['return_msg']);
            }
        });
    }

    // 重置
    public resetForm(): void {
        this.searchForm.reset();
    }


    // 查询分类树
    findCategoryTree(roleType) {
        this.cms.getOwnCategoryTree(roleType , data => {
            if (data['return_code'] === '000000') {
                this.nodes = data['return_data'];
                if (this.nodes.length !== 0) {
                    this.generateComment(this.nodes);
                } else {
                    this.nodes = [];
                }
            } else {
                this.message.create('error', data['return_msg']);
            }
        });
    }

    // 递归分类树
    generateComment(data) {
        for (const i in data) {
            if (data[i].nodes == null) {
                const item = {
                    isLeaf: true,
                    title: data[i].text,
                    key: data[i].id,
                    children: data[i].nodes,
                };
                data[i] = item;
            } else {
                const item = {
                    isLeaf: false,
                    title: data[i].text,
                    key: data[i].id,
                    children: data[i].nodes,
                };
                data[i] = item;
                this.generateComment(data[i].children);
            }
        }
        this.nodes = data;
    }

    // 新增
    getAdd() {
        this.isVisible = true;
        this.editFlag = false;
    }

    // 编辑
    getEdit(data: object) {
        console.log(data);
        if (data['imgData'] != null && data['imgData'] !== '') {
            const logo = String(data['imgData']);
            const logoArray = [];
            logoArray.push(
                {
                    uid: 1,
                    name: logo,
                    status: 'done',
                    url: environment.imageUrl + logo
                });
            this.imgFile = logoArray;
        }
        this.id = data['id'];
        this.validateForm.patchValue(data);
        this.editFlag = true;
        this.isVisible = true;
    }

    // 提交内容
    handleOk() {
        // tslint:disable-next-line:forin
        for (const i in this.validateForm.controls) {
            this.validateForm.controls[i].markAsDirty();
            this.validateForm.controls[i].updateValueAndValidity();
            if (this.validateForm.controls[i].errors != null) {
                this.message.error('必填项不能为空');
                return;
            }
        }
        if (this.imgFile.length !== 0) {
            if (this.imgFile[0]['response'] != null) {
                this.validateForm.value.imgData = this.imgFile[0]['response']['return_data'][0];
            } else {
                this.validateForm.value.imgData = this.imgFile[0].name;
            }
        }
        if (this.editFlag) {
            this.validateForm.value.id = this.id;
            this.cms.updateCmsContent(this.validateForm.value , data => {
                if (data['return_code'] === '000000') {
                    this.isVisible = false;
                    this.getRequest(false, this.searchForm.value);
                    this.message.success('修改成功');
                } else {
                    this.message.create('error', '修改失败');
                }
            });
        } else {
            this.cms.insertCmsContent(this.validateForm.value , data => {
                if (data['return_code'] === '000000') {
                    this.isVisible = false;
                    this.getRequest(false, this.searchForm.value);
                    this.message.success('新增成功');
                } else {
                    this.message.create('error', '修改失败');
                }
            });
        }
    }

    // 图片查看
    handlePreview = async (file: NzUploadFile) => {
        if (!file.url && !file.preview) {
            // tslint:disable-next-line:no-non-null-assertion
            file.preview = await getBase64(file.originFileObj!);
        }
        this.previewImage = file.url || file.preview;
        this.previewVisible = true;
    }

    showDeleteConfirmDelete(id: number): void {
        this.common.showConfirm('是否确定删除!' , dataR => {
            if (dataR) {
                this.cms.deleteById(id, data => {
                    if (data['return_code'] === '000000') {
                        this.getRequest(true, this.searchForm.value);
                        this.message.success(data['return_data']);
                    } else {
                        this.message.error(data['return_msg']);
                    }
                });
            }
        });
    }



    public getForbiddenUser(id, status: any): void {
        const message = (status === 2 ? '是否下架当前内容' : '是否上架当前内容');
        const s = status === 2 ? 1 : 2;
        this.common.showConfirm(message, data => {
            if (data) {
                this.cms.updateContentStatus(id, s , dataUser => {
                    if (dataUser['return_code'] === '000000') {
                        this.message.success(dataUser['return_data']);
                    } else {
                        this.message.error(dataUser['return_msg']);
                    }
                    this.getRequest(false , this.searchForm.value);
                });
            }
        });
    }

}