<?php

namespace Core\annotationhandlers;

use Core\annotations\RequestMapping;
use Core\BeanFactory;

return [
    //$methodAnnoSelf 注解本身
    RequestMapping::class => function (\ReflectionMethod $method, $instance, $methodAnnoSelf) {
        $path            = $methodAnnoSelf->value;//uri;
        $requestMethod   = count($methodAnnoSelf->method) > 0 ? $methodAnnoSelf->method : ['GET'];
        $RouterCollector = BeanFactory::getBean("RouterCollector");
        //var_dump($RouterCollector);
        $RouterCollector->addRouter($requestMethod, $path, function ($params,$extParams) use ($method, $instance) {
            $inputParams=[];
            //得到方法的反射参数
            $refParams=$method->getParameters();
            foreach ($refParams as $refParam){
                if(isset($params[$refParam->getName()])){
                    $inputParams[] =  $params[$refParam->getName()];
                }else{
                    foreach($extParams as $extParam){
                        //$refParam->getClass 获取参数Request $request的类型
                        if($refParam->getClass()->isInstance($extParam)){
                            $inputParams[]  = $extParam;
                            //continue;
                            goto abc;
                        }
                    }
                    $inputParams[] = false;
                }
                abc:
            }
            return $method->invokeArgs($instance,$inputParams);
            //return $method->invoke($instance);//执行反射方法

        });
        return $instance;
    }
];