<?php

namespace Modules\Dashboard\Repositories\Contracts;

interface KJCDashboardRepositoryInterface
{
    /**
     * Get total KJC asset entitlement
     */
    public function getTotalEntitlement(array $filters = [], $user = null): int;

    /**
     * Get total KJC asset holdings
     */
    public function getTotalHoldings(array $filters = [], $user = null): int;

    /**
     * Get KJC asset holdings by status
     */
    public function getHoldingsByStatus(array $filters = [], $user = null): array;

    /**
     * Get KJC asset holdings with pagination
     */
    public function getHoldingsPaginated(array $filters = [], int $perPage = 20, $user = null): array;

    /**
     * Get KJC asset entitlements with pagination
     */
    public function getEntitlementsPaginated(array $filters = [], int $perPage = 20, $user = null): array;

    /**
     * Get KJC asset holdings by specific status
     */
    public function getHoldingsBySpecificStatus(string $status, array $filters = [], $user = null): array;

    /**
     * Get KJC asset holdings grouped by unit
     */
    public function getHoldingsByUnit(array $filters = [], $user = null): array;

    /**
     * Get KJC asset holdings monthly trends
     */
    public function getMonthlyTrends(array $filters = [], $user = null): array;

    /**
     * Get KJC historical metrics (KEUPAYAAN, KESIAGAAN, SERVISIBILITI) by month
     */
    public function getHistoricalMetricsByMonth(array $filters = []): array;

    /**
     * Get KJC asset details by status (paginated).
     * When status is '' or 'null', returns assets where status column is NULL (not yet assigned).
     */
    public function getAssetDetailsByStatus(string $status, array $filters = [], $user = null): array;
}
