<?php

namespace App\Services\Quote\Contracts;

/**
 * 테넌트별 수식 핸들러 인터페이스
 *
 * FormulaEvaluatorService에서 테넌트 전용 계산 로직을 위임받는 핸들러 계약.
 * 각 테넌트 핸들러는 Handlers/Tenant{id}/FormulaHandler.php에 위치하며,
 * FormulaHandlerFactory가 class_exists()로 자동 발견한다.
 */
interface TenantFormulaHandler
{
    /**
     * 모터 용량 결정
     *
     * @param  string  $productType  제품 타입 (screen/steel/slat)
     * @param  float  $weight  중량 (kg)
     * @param  string  $bracketInch  브라켓 인치
     * @return string  모터 용량 코드 (예: '300K', '800K')
     */
    public function calculateMotorCapacity(string $productType, float $weight, string $bracketInch): string;

    /**
     * 브라켓 크기 결정
     *
     * @param  float  $weight  중량 (kg)
     * @param  string|null  $bracketInch  브라켓 인치
     * @return string  브라켓 크기 (예: '530*320', '690*390')
     */
    public function calculateBracketSize(float $weight, ?string $bracketInch = null): string;

    /**
     * 동적 BOM 항목 계산 (주자재, 모터, 제어기, 절곡품, 부자재)
     *
     * @param  array  $inputs  계산 변수 (W0, H0, QTY, product_type, product_model 등)
     * @return array  BOM 항목 배열 [{item_id, item_code, item_name, category, quantity, unit_price, total_price, ...}]
     */
    public function calculateDynamicItems(array $inputs): array;
}
