<!-- This example requires Tailwind CSS v2.0+ -->
<template>
    <div class="pb-8 px-4 sm:px-6 lg:px-8">
        <br />
        <div class="sm:flex sm:items-center">
            <div class="sm:flex-auto">
                <h1 class="text-xl font-semibold text-gray-900">
                    API KEY 로그 보기
                </h1>
                <p class="mt-2 text-sm text-gray-700">
                    API KEY의 생성, 변경, 삭제 기록을 확인할 수 있습니다.
                </p>
            </div>

            <!--
            <div class="mt-4 sm:mt-0 sm:ml-16 sm:flex-none">
                <label for="mobile-search-candidate" class="sr-only"
                    >Search</label
                >
                <label for="desktop-search-candidate" class="sr-only"
                    >Search</label
                >
                <div class="flex rounded-md shadow-sm">
                    <div class="relative flex-grow focus-within:z-10">
                        <div
                            class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"
                        >
                            <MagnifyingGlassCircleIcon
                                class="h-5 w-5 text-gray-400"
                                aria-hidden="true"
                            />
                        </div>
                        <input
                            id="mobile-search-candidate"
                            v-model="searchKeyword"
                            type="text"
                            name="mobile-search-candidate"
                            class="focus:ring-indigo-500 focus:border-indigo-500 block w-full rounded-none rounded-l-md pl-10 sm:hidden border-gray-300"
                            placeholder=""
                        />
                        <input
                            id="desktop-search-candidate"
                            v-model="searchKeyword"
                            type="text"
                            name="desktop-search-candidate"
                            class="hidden focus:ring-indigo-500 focus:border-indigo-500 w-full rounded-none rounded-l-md pl-10 sm:block sm:text-sm border-gray-300"
                            placeholder=""
                        />
                    </div>
                    <button
                        type="button"
                        class="-ml-px relative inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-r-md text-gray-700 bg-gray-50 hover:bg-gray-100 focus:outline-none focus:ring-1 focus:ring-indigo-500 focus:border-indigo-500"
                        @click="doAction('search', searchKeyword)"
                    >
                        <span class="ml-2">검색</span>
                    </button>
                </div>
            </div>
-->
        </div>

        <BaseList1
            :headings="listHeadings"
            :actions="listActions"
            :keys="listKeys"
            :data="listData"
            :action-key="actionKey"
            :column-filter="columnFilter"
            :do-action="doAction"
        />

        <BasePagination1
            :total-page-count="totalPageCount"
            :current-page-number="currentPageNumber"
            :page-size="pageSize"
            :records-total="recordsTotal"
            :page-move="pageMove"
        />
        <div class="p-0 rounded-bl-2xl rounded-br-2xl md:px-0">
            <a
                href="javascript:void(0)"
                class="text-base font-medium text-indigo-700 hover:text-indigo-600"
                @click="$router.back()"
                >&larr;이전 화면으로<span aria-hidden="true"> </span
            ></a>
        </div>
    </div>
</template>

<script setup lang="ts">
import {
    ChevronDownIcon,
    MagnifyingGlassCircleIcon,
} from '@heroicons/vue/24/solid';
import consolaGlobalInstance from 'consola';

const { $dayjs } = useNuxtApp();

const router = useRouter();
definePageMeta({
    middleware: 'check-auth-admin',
});

const route = useRoute();

console.log('route.params=', route.params);

const targetName = route.params.hero;
const hero = route.params.uid;

console.log('targetName=', targetName);
console.log('hero=', hero);

let listTarget = 'log:user:active';

const listHeadings = [
    {
        title: '누가',
        class: 'py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-6',
        key: 'uid',
        hiddenInfo: {
            headClass: '',
            dts: [],
            dds: [],
        },
        subClass:
            'w-full max-w-0 py-4 pl-4 pr-3 text-sm font-medium text-gray-900 sm:w-auto sm:max-w-none sm:pl-6',
    },
    {
        title: '언제',
        class: 'hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-900 lg:table-cell',
        key: 'created',
        hiddenInfo: {
            headClass: '',
            dts: [],
            dds: [],
        },
        subClass: 'hidden px-3 py-4 text-sm text-gray-500 lg:table-cell',
    },
    {
        title: '무엇을',
        class: 'hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-900 sm:table-cell',
        key: 'tag',
        hiddenInfo: {
            headClass: '',
            dts: [],
            dds: [],
        },
        subClass: 'hidden px-3 py-4 text-sm text-gray-500 sm:table-cell',
    },
];
const listActions = ['상세보기'];
const actionKey = 'serial';
const listKeys = [
    'serial',
    'raw',
    'level',
    'comment',
    'status',
    'updated',
    'created',
];
const listData = ref([]);

const totalPageCount = ref(0);
const currentPageNumber = ref(1);

const pageSize = ref(10);
const recordsTotal = ref(0);
// const order = [{ column: 'serial', dir: 'desc' }];
// const columns = { serial: { data: 'serial' } };

function columnFilter(key, val) {
    // console.log("columnFilter(), key = ", key, ", val = ", val);

    if (key == 'updated' || key == 'created') {
        return $dayjs(val).format('YY/MM/DD  A h:mm:ss');
        // return $dayjs(val).format('YY/MM/DD');
    } else if (key == 'uid') {
        return '' + targetName + '';
    } else if (key == 'status') {
        let statusTag = '정상';
        switch (val) {
            case 0:
                statusTag = '정상등록';
                break;
            case 4:
                statusTag = '삭제됨';
                break;
            default:
                statusTag = val;
        }
        return statusTag;
    } else if (key == 'level') {
        let levelTag = 'mid';
        switch (val) {
            case 10:
                levelTag = 'high';
                break;
            case 50:
                levelTag = 'mid';
                break;
            case 100:
                levelTag = 'low';
                break;

            default:
                levelTag = val;
        }
        return levelTag;
    } else {
        return val;
    }
}

function doAction(tag, target) {
    console.log('on doAction(), tag=', tag, ', target=', target);

    if (tag == '상세보기') {
        navigateTo('/admin/user/' + hero + '/history/detail/' + target);
    } else if (tag == 'search') {
        console.log('search for ', target);
        if (target == '') {
            listTarget = 'log:user:active';
        } else {
            listTarget = 'log:user';
            // hero = target;
        }

        refresh();
    }
}

function pageMove(targetPageIdex) {
    console.log('on pageMove(), targetPageIdex=', targetPageIdex);
    currentPageNumber.value = targetPageIdex;
    refresh();
}

async function refresh() {
    const responseJson = await _crossCtl.doComm('list', listTarget, {
        start: (currentPageNumber.value - 1) * pageSize.value,
        length: pageSize.value,
        hero: hero,
    });

    console.log('listTarget=', listTarget);
    console.log('hero=', hero);

    console.log('responseJson=', responseJson);

    currentPageNumber.value = responseJson['currentPageNumber'];
    totalPageCount.value = responseJson['totalPageCount'];
    pageSize.value = parseInt(responseJson['pageSize']);
    recordsTotal.value = responseJson['recordsTotal'];

    listData.value = responseJson['data'];
}

if (hero != undefined) {
    doAction('search', hero);
} else {
    refresh();
}
</script>
