(() => {
    'use strict';

    window.G = window.G || {};

    $(() => {
        
    });

    function init(){

        // 공지사항 알림 발송
        $('.sub_cont .board_list').off('click.send').on('click.send', 'p.edit>span>.btn-send', (e) => {
            e.stopPropagation();

            sendNoticeAlarm($(e.currentTarget).closest('a.type-notice').data('uid'));
        });

        //공지사항 수정
        $('.sub_cont .board_list').off('click.edit').on('click.edit', 'p.edit>span>.btn-edit', (e) => {
            e.stopPropagation();
            $('.foot_btn .foot_btn_back_history').data('target', 'list');
            $('.foot_btn .foot_btn_back_history').data('uid', '');
            openEditNotice('notice', $(e.currentTarget).closest('a.type-notice').data('uid'));
        });

        //공지사항 삭제
        $('.sub_cont .board_list').off('click.delete').on('click.delete', 'p.edit>span>.btn-delete', (e) => {
            e.stopPropagation();
            deleteNotice($(e.currentTarget).closest('a.type-notice').data('uid'), function (notice_id) {
                $(`.board_list>li:has(a[data-uid=${notice_id}])`).remove();
            });
        });

        //공지알림대상
        $('.board_edit input[type=radio][name=edit_notice_target]').off('change').on('change', (e) => {
            if ($(e.currentTarget).val() == 'DEPT') {
                $('#btn_edit_open_dept, .edit_trgt_dept').removeClass('none')
            } else {
                $('#btn_edit_open_dept, .edit_trgt_dept').addClass('none');
            }
        });

        // 전체읽음 버튼
        $('#btn_read_all_notice').off('click').on('click', (e) => {
            e.preventDefault();
            readAllNotices();
        });

        $(`.organ_pop ul.tree`).off('click');
        //그룹 노드 클릭 - 그룹명(label)
        $(`.organ_pop ul.tree`).on('click', 'label', function(){
            $(`.organ_pop ul.tree li.selected`).removeClass('selected');
            $(this).closest('li').addClass('selected');
            $(this).siblings('.arrow:first').trigger('click'); 
        });
        
        //그룹노드 확장아이콘 클릭 - arrow클래스는 그룹노드에만 존재함
        $(`.organ_pop ul.tree`).on('click', '.arrow', function(){
            if($(this).closest('li').hasClass('fav')){
                $(this)
                    .toggleClass('expanded')
                    .toggleClass('collapsed')
                    .siblings("ul")
                    .toggleClass('none')
                ;
            }else{
                let current_group_code = $(this).closest('li').data('deptcode');
                let current_group_info = group_map[current_group_code];
                if(current_group_info == undefined){
                    return;
                }
                if(!$(this).parent().is(':has(li)')
                    && $(this).hasClass('collapsed')
                    && ((current_group_info.user_id_list||[]).length != 0 || (current_group_info.child_groups||[]).length != 0))
                {
                    //draw child dept
                    (current_group_info.child_groups||[]).map((dept_id, idx)=>{
                        G.drawOrgTreeDept($(this).siblings(`ul[data-deptcode=${current_group_code}]`), group_map[dept_id], false);
                    });
                }
                $(this)
                    .toggleClass('expanded')
                    .toggleClass('collapsed')
                    .siblings("ul:first")
                    .toggleClass('none')
                ;
            }
        });
    }
    // 공지사항 알림 발송
    function sendNoticeAlarm(notice_id, callback, force) {
        if(force == true){
            requestAstro(`mdial/v1/notice/alarm/send`, { notice_id: notice_id }, 'post')
            .then(response => {
                console.log('sendNoticeAlert', "공지사항 발송 성공", response);
                popAlert("발송되었습니다.", callback);
            })
            .catch(reason => {
                console.log('sendNoticeAlert', "공지사항 발송 실패", reason);
                popAlert("오류가 발생했습니다.<br/>잠시 후 다시 시도해 주세요");
            });
        }else{
            popConfirm('해당 공지를 발송하시겠습니까?', function () {
                requestAstro(`mdial/v1/notice/alarm/send`, { notice_id: notice_id }, 'post')
                .then(response => {
                    console.log('sendNoticeAlert', "공지사항 발송 성공", response);
                    popAlert("발송되었습니다.", callback);
                })
                .catch(reason => {
                    console.log('sendNoticeAlert', "공지사항 발송 실패", reason);
                    popAlert("오류가 발생했습니다.<br/>잠시 후 다시 시도해 주세요");
                });
            });
        }
    }

    function deleteNotice(notice_id, callback) {
        popConfirm('삭제하시겠습니까?\n삭제한 데이터는 복구 할 수 없습니다.', function () {
            requestAstro(`notice/v1/notice/${notice_id}`, {}, 'delete')
                .then(response => {
                    console.log('deleteNotice', "공지사항 삭제 성공", response);
                    if (callback) callback(notice_id);
                    popAlert("삭제되었습니다.");
                })
                .catch(reason => {
                    console.log('deleteNotice', "공지사항 삭제 실패", reason);
                    popAlert("오류가 발생했습니다.<br/>잠시 후 다시 시도해 주세요");
                });
        })
    }

    // 전체읽음
    function readAllNotices() {
        var $btn = $('#btn_read_all_notice');
        // 중복 클릭 방지
        if ($btn.data('reading')) return;
        $btn.data('reading', true);

        // 현재 탭 필터 상태
        var v = $('.sub_cont .tab input[name="notice_type"]:checked').val(); // "ALL" | "N" | "E"
        var params = { 
            temp: false,
            corp_code : serverData.corp_code
        };
        if (v === 'N' || v === 'E') params.category = v;
        else params.categories = ['E', 'N']; // 전체

        // 페이지 단위로 순회 (offset 사용)
        var offset = 0;

        function fetchPage() {
            var p = $.extend({}, params, { offset: offset });
            return requestAstro('notice/v1/notices/all', p, 'post').then(function (r) {
                if (!(r && r.code === '0000' && $.isArray(r.data) && r.data.length)) {
                    return false; // 더 없음
                }

                try {
                    var readed = window.localStorage.getArray('readed_contents') || {};
                    $.each(r.data, function (_, item) {
                        var uid = item ? item.uid : null;
                        var cat = (item && item.category) ? item.category : 'N';
                        if (uid == null) return;
                        if (!$.isArray(readed[cat])) readed[cat] = [];
                        if ($.inArray(uid, readed[cat]) === -1) readed[cat].push(uid);
                        $('.sub_cont .board_list a[data-uid="' + uid + '"]').addClass('visited');
                    });
                    window.localStorage.setArray('readed_contents', readed);
                } catch (e) {
                    console.log('readAllNotices localStorage error', e);
                }

                offset += r.data.length;    
                return true; // 다음 페이지 계속
            });
        }

        (function loop() {
            return fetchPage().then(function (hasMore) {
                if (hasMore) return loop();

                // 현재 화면도 visited 처리
                $('.board_list>li>a').addClass('visited');
                popAlert('전체 읽음 처리되었습니다.');
            });
        })()
        .catch(function (err) {
            console.log('readAllNotices error', err);
            popAlert('전체 읽음 처리 중 오류가 발생했습니다.');
        })
        .finally(function () {
            $btn.data('reading', false);
        });
    }

    G.sendNoticeAlarm = sendNoticeAlarm;
    G.init.notice = init;

})();