<?php

namespace App\Domains\Integration\Controllers;

use App\Domains\Integration\Models\Integration;
use App\Domains\Integration\Requests\StoreTenantIntegrationRequest;
use App\Domains\Integration\Services\TenantIntegrationService;
use Illuminate\Routing\Controller;

class TenantIntegrationController extends Controller
{
    protected TenantIntegrationService $tenantIntegrationService;

    public function __construct(TenantIntegrationService $tenantIntegrationService)
    {
        $this->tenantIntegrationService = $tenantIntegrationService;
    }

    public function index(string $tenantCode)
    {
        return response()->json($this->tenantIntegrationService->getAllForTenant($tenantCode));
    }

    public function show(string $tenantCode, string $integrationCode)
    {
        $integration = $this->tenantIntegrationService->getTenantIntegration($tenantCode, $integrationCode);

        if (! $integration) {
            return response()->json([
                'code' => 'integration.not_configured',
                'message' => __('api.integration.not_configured'),
            ], 404);
        }

        return response()->json($integration);
    }

    public function store(StoreTenantIntegrationRequest $request, string $tenantCode, string $integrationCode)
    {
        $integration = Integration::where('integration_code', $integrationCode)->firstOrFail();

        try {
            $this->tenantIntegrationService->updateOrCreateIntegration(
                $tenantCode,
                $integration,
                $request->input('integration_data', [])
            );

            return response()->json([
                'code' => 'integration.configured',
                'message' => __('api.integration.configured'),
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'code' => 'integration.validation_failed',
                'message' => __('api.integration.validation_failed', ['error' => $e->getMessage()]),
            ], 400);
        }
    }
}
