# Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.
# OpenOLC is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#         `http://license.coscl.org.cn/MulanPSL2`
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.

import logging
from typing import List, Optional

from olc.bean.tag_group import TagGroup
from olc.control.context.context import OlcContext
from olc.control.handler_chain.box_handler import AbsBoxHandler
from olc.control.matcher.matcher_provider import OlcMatcherProvider
from olc.statistic.statistic_factory import OlcStatisticFactory

logger = logging.getLogger(__name__)


class GroupMatcherHandler(AbsBoxHandler):

    def do_in_coming(
        self, context: OlcContext, groups: List[TagGroup]
    ) -> Optional[List[TagGroup]]:
        tag_groups = OlcMatcherProvider.get_group_matcher().match_tag_groups(
            context.request
        )
        logger.debug("request: %s match groups:%s", context.request, tag_groups)
        for tag_group in tag_groups:
            statistic = OlcStatisticFactory.get_instance().get_and_create(tag_group)
            context.statistics[tag_group] = statistic
            logger.debug("statistic: %s", statistic)
        return tag_groups  # 由基类替换传给下游

    def do_out_coming(self, context: OlcContext) -> None:
        return None