<?php

declare(strict_types=1);

namespace Builder\Core\Foundation\Resources;

use Builder\Core\Foundation\Dashboard\Widgets\Widget;
use Builder\Core\Foundation\Definition\FieldBuilder;
use Builder\Core\Foundation\Definition\Hook;
use Builder\Core\Foundation\Tables\BulkAction;
use Builder\Core\Foundation\Tables\Column;
use Builder\Core\Foundation\Tables\Filter;
use Builder\Core\Foundation\Tables\RowAction;

abstract class Extension
{
    /** @return class-string<Resource> */
    abstract public static function getExtends(): string;

    public function fields(): FieldBuilder
    {
        return FieldBuilder::make();
    }

    /** @return list<string> */
    public function eagerLoad(): array
    {
        return [];
    }

    /** @return array<string, mixed> */
    public function rules(string $action): array
    {
        return [];
    }

    /** @return list<Hook> */
    public function hooks(): array
    {
        return [];
    }

    /** @return list<Column> */
    public function columns(): array
    {
        return [];
    }

    /** @return list<Filter> */
    public function filters(): array
    {
        return [];
    }

    /** @return list<BulkAction> */
    public function bulkActions(): array
    {
        return [];
    }

    /** @return list<RowAction> */
    public function rowActions(): array
    {
        return [];
    }

    /** @return list<Widget> */
    public function widgets(): array
    {
        return [];
    }
}
