<?php

namespace App\Services;

use App\Models\MylogModel;
use App\Libraries\PipelineStepInterface;
use App\Libraries\OperationContext;
use App\Helpers\MylogHelper;
use App\Forms\MylogForm;
use App\Entities\MylogEntity;

class MylogService extends CommonService implements PipelineStepInterface
{
    protected string $formClass = MylogForm::class;
    protected string $helperClass = MylogHelper::class;

    public function __construct(MylogModel $model)
    {
        parent::__construct($model);
        $this->addClassPaths('Mylog');
    }
    public function getEntityClass(): string
    {
        return MylogEntity::class;
    }
    /**
     * LogService는 START/SUCCESS/FAILURE 로그를 기록합니다.
     * LogService는 파이프라인의 시작과 끝에서만 Executor에 의해 직접 호출됩니다.
     */
    public function log(OperationContext $context, string $status): void
    {
        if ($status === STATUS['FAILED'] && $context->error) {
            $message = "[{$context->action}_{$status}] Error: {$context->error->getMessage()}";
        } else {
            $message = "[{$context->action}_{$status}] Steps Executed: " . count($context->pipelineDatas);
        }
        log_message('debug', $message);
        $this->create([
            'title' => "{$context->action} 작업 {$status} 로그",
            'content' => $message,
            'status' => $status,
            'user_uid' => $context->auth->getUID(),
        ]);
    }

    // PipelineStep 구현은 이 예시에서는 사용하지 않습니다. (로그는 Executor가 감쌈)
    public function handle(OperationContext $context): OperationContext
    {
        return $context;
    }

    //기본 기능부분
    protected function getEntity_process(mixed $entity): MylogEntity
    {
        return $entity;
    }
}
