<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.io.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="/jsp/common/include/localemessage.jsp" %>
<%
	response.setHeader("Pragma", "No-cache");
	response.setHeader("Cache-Control", "no-cache");
	response.setHeader("Expires", "0");
%>

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<jsp:include page="/jsp/common/include/css.jsp"/>
<jsp:include page="/jsp/common/include/script.jsp"/>

<script language="javascript" >
var url      = '<c:url value="/onl/admin/authserver/scopeMan.json" />';
var url_view = '<c:url value="/onl/admin/authserver/scopeMan.view" />';
var api_url_view = '<c:url value="/onl/apim/apigroup/apiGroupMan.view" />';

var isDetail = false;
function isValid(){
	if($('input[name=scopeName]').val() == ""){
		alert("스코프명을 입력하여 주십시요.");
		$('input[name=scopeName]').focus();
		return false;
	}
	if($('input[name=scopeId]').val() == ""){
		alert("스코프ID를 입력하여 주십시요.");
		$('input[name=scopeId]').focus();
		return false;
	}
	
	return true;
}

function detail(key){
	if (!isDetail)return;
	$.ajax({
		type : "POST",
		url:url,
		dataType:"json",
		data:{cmd: 'DETAIL', scopeId : key},
		success:function(json){
			var data = json;
			$('input[name=scopeId]').attr('readonly', true);

			$("#ajaxForm input[type!=checkbox],#ajaxForm select,#ajaxForm textarea").each(function(){
				var name = $(this).attr("name");
				var tag  = $(this).prop("tagName").toLowerCase();
				$(tag+"[name="+name+"]").val(data[name.toUpperCase()]);
			});
		},
		error:function(e){
			alert(e.responseText);
		}
	});
}

function mappingInfo(key){
    if (!isDetail) return;

    $.ajax({
        type : "POST",
        url: url,
        dataType: "json",
        data: {cmd: 'API_LIST', searchScopeId : key},
        success: function(json){
            var mappingData = json.rows; 

            if (mappingData && mappingData.length > 0) {
                $.each(mappingData, function(idx, row) {
                    row.apiId = row.apiId;    
                    row.apiDesc = row.apiDesc;
                    row.apiFullPath = row.APIFULLPATH;
                    row.bzwksvckeyname = row.BZWKSVCKEYNAME;
                });
            }

            var $grid = $("#selectedApiGrid");
            $grid.jqGrid('clearGridData'); 
            $grid.jqGrid('setGridParam', { 
                datatype: 'local',
                data: mappingData
            }).trigger("reloadGrid"); 
        },
        error: function(e){
            alert("데이터 조회 중 오류 발생: " + e.responseText);
        }
    });
}

function init(key, callback){
	detail(key);

	var selectedApiGrid = $("#selectedApiGrid");
	selectedApiGrid.jqGrid({
		datatype: "local",
		colNames: ['API ID', 'API 명', 'SCOPE ID', 'SCOPE 명', 'API FULL PATH', 'API 정보'],
		colModel: [
			{name: 'apiId', index: 'apiId', width: 100, align: 'center'},
			{name: 'apiDesc', index: 'apiDesc', width: 100, align: 'center'},
			{name: 'SCOPEID', index: 'SCOPEID', width: 100, align: 'center'},
			{name: 'SCOPENAME', index: 'SCOPENAME', width: 100, align: 'center'},
			{name: 'APIFULLPATH', index: 'APIFULLPATH', width: 100, align: 'left'},
			{name: 'BZWKSVCKEYNAME', index: 'BZWKSVCKEYNAME', width: 100, align: 'left'}
		],
		rowNum: 30,
		rowList: [10, 20, 30],
		pager: '#selectedApiGridPager',
		sortname: 'apiId',
		viewrecords: true,
		sortorder: "asc",
		caption: "선택된 API",
		height: 200,
		autowidth: true,
		multiselect: true,
		ondblClickRow: function (rowid, status, e) {
			// selectedApiGrid.jqGrid('delRowData', rowid);
		}
	});

	mappingInfo(key); // SCOPE ID의 매핑정보 (AJAX 호출)

	// callback이 함수인지 확인 후 호출 (안전장치)
	if (typeof callback === 'function') {
		callback(key);
	}
}

$(document).ready(function() {
	var returnUrl = getReturnUrlForReturn();
	var key ="${param.scopeId}";
	if (key != "" && key !="null"){
		isDetail = true;
	}
	init(key,detail);
	
	$("#btn_modify").click(function(){
		if (!isValid()){
			return;
		}
		var scopeId = $('input[name=scopeId]').val();
		var postData = $('#ajaxForm').serializeArray();

		var rows = $("#selectedApiGrid").jqGrid('getRowData');
		$.each(rows, function(index, item) {
			item.scopeId = scopeId;
		});
		postData.push({ name: "apiList" , value: JSON.stringify(rows) });

		if (isDetail){
			postData.push({ name: "cmd" , value:"UPDATE"});
		}else{
			postData.push({ name: "cmd" , value:"INSERT"});
		}

		$.ajax({
			type : "POST",
			url:url,
			data:postData,
			beforeSend: function() {
				$("[id^='btn_']").prop("disabled", true);
				$("#btn_modify").text("처리중 . . . . .");
			},
			success:function(args){
				alert("저장 되었습니다.");
				goNav(returnUrl);//LIST로 이동
			},
			error:function(e){
				alert(e.responseText);
			},
			complete: function() {
				$("[id^='btn_']").prop("disabled", false);
				$("#btn_modify").text("수정");
			}
		});
	});

	$("#btn_delete").click(function(){
		if(confirm("삭제하시겠습니까?")){
			var postData = $('#ajaxForm').serializeArray();
			postData.push({ name: "cmd" , value:"DELETE"});
			$.ajax({
				type : "POST",
				url:url,
				data:postData,
				success:function(args){
					if(args.status=="error"){
						alert("동기화중 오류입니다.\n확인하여 주십시요.\n" + args.message);
					}else{
						alert("삭제 되었습니다.");
						goNav(returnUrl);//LIST로 이동
					}
				},
				error:function(e){
					alert(e.responseText);
				}
			});
		}
	});
	
	$("#btn_previous").click(function(){
		goNav(returnUrl);//LIST로 이동
	});

    $("#btn_popup_api").click(function () {
        const args = {};
        const url2 = api_url_view += "?cmd=POPUP";
        showModal(url2, args, 1280, 860, function () {
            const popupFrame = args.self.frames[0];
            const returnValue = popupFrame.returnValue;
            const frameElement = popupFrame.frameElement
            const parentElement = frameElement.parentNode; // 부모 노드를 가져옴

            if (parentElement) { // 부모 노드가 존재하는지 확인
                parentElement.removeChild(frameElement);
            }

            var rows = $("#selectedApiGrid").jqGrid('getRowData');

            var existingApiIds = new Set(rows.map(function(row) {
                return String(row.apiId);
            }));

            var newItems = Array.isArray(returnValue) ? returnValue : [returnValue];

            var ids = $("#selectedApiGrid").jqGrid('getDataIDs');
            var currentIdSeq = ids.length > 0 ? Math.max(...ids.map(Number)) : 0;

            $.each(newItems, function(index, item) {
                var checkId = String(item.apiId); 
                
                if (!existingApiIds.has(checkId)) {
                    currentIdSeq++; 
                    $("#selectedApiGrid").jqGrid('addRowData', currentIdSeq, item, "last");
                    
                    existingApiIds.add(checkId); 
                } else {
                    //console.log("중복 제외됨: " + item.apiId);
                }
            });
            
        alert("중복건 수를 제외한 API가 추가되었습니다.");
        });
    });

    $("#btn_delete_api").click(function () {
        var grid = $("#selectedApiGrid");
        var selectedRowIds = grid.jqGrid('getGridParam', 'selarrrow'); // 선택된 행의 ID 배열을 가져옴
        if (selectedRowIds.length > 0) {
            // 선택된 행의 ID를 복사한 배열을 사용
            var idsToDelete = selectedRowIds.slice();

            for (var i = 0; i < idsToDelete.length; i++) {
                grid.jqGrid('delRowData', idsToDelete[i]); // 선택된 각 행을 삭제
            }
        } else {
            alert("Please select at least one row to delete.");
        }
    });

	buttonControl(isDetail);
	titleControl(isDetail);
	
});
 
</script>
</head>
	<body>
		<div class="right_box">
			<div class="content_top">
				<ul class="path">
					<li><a href="#">${rmsMenuPath}</a></li>
				</ul>
			</div><!-- end content_top -->
			<div class="content_middle">
				<div class="search_wrap">
					<button type="button" class="cssbtn" id="btn_delete" level="W" status="DETAIL"><i class="material-icons">delete</i> <%= localeMessage.getString("button.delete") %></button>
					<button type="button" class="cssbtn" id="btn_modify" level="W" status="DETAIL,NEW"><i class="material-icons">save</i> <%= localeMessage.getString("button.modify") %></button>
					<button type="button" class="cssbtn" id="btn_previous" level="R" status="DETAIL,NEW"><i class="material-icons">arrow_back</i> <%= localeMessage.getString("button.previous") %></button>
<%-- 					<img src="<c:url value="/img/btn_delete.png"/>" alt="" id="btn_delete" level="W" status="DETAIL"/> --%>
<%-- 					<img src="<c:url value="/img/btn_modify.png"/>" alt="" id="btn_modify" level="W" status="DETAIL,NEW" /> --%>
<%-- 					<img src="<c:url value="/img/btn_previous.png"/>" alt="" id="btn_previous" level="R" status="DETAIL,NEW"/> --%>
				</div>
				<div class="title"><%= localeMessage.getString("scpManDt.title") %></div>	
				
				<form id="ajaxForm">
					<table class="table_row" cellspacing="0">
						<tr>
							<th style="width:180px;"><%= localeMessage.getString("scpMan.scpNm") %> <small>(*)</small></th><td><input type="text" name="scopeName"/></td>
						</tr>
						<tr>
							<th><%= localeMessage.getString("scpMan.scpId") %> <small>(*)</small></th><td><input type="text" name="scopeId"/></td>
						</tr>
						<tr>
							<th><%= localeMessage.getString("scpMan.desc") %></th>
							<td>
								<textarea name="description" rows="3" cols="50"></textarea>
							</td>
						</tr>
					</table>
				</form>
				<!-- API ID / API Full Path 추가 -->
				<div style="font-size:0;">
	            <div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 5px ">
	                <div class="table_row_title" style="margin-bottom: 0px">API</div>
	                <div style="text-align: end;">
	                    <button type="button" class="cssbtn" id="btn_delete_api" level="W" status="DETAIL,NEW">
	                        <i class="material-icons">delete</i> <%= localeMessage.getString("button.delete") %>
	                    </button>
	                    <button type="button" class="cssbtn" id="btn_popup_api" level="W" status="DETAIL,NEW">
	                        <i class="material-icons">add</i> API <%= localeMessage.getString("button.add") %>
	                    </button>
	                </div>
	            </div>
	            <div style="display:inline-block; width:calc(100%); vertical-align:top;">
	                <div id="selectedApiList" style="margin-top:10px;">
	                    <table id="selectedApiGrid"></table>
	                </div>
	            </div>
	        </div>
			</div><!-- end content_middle -->
		</div><!-- end right_box -->
	</body>
</html>