<?php

namespace App\Contribution\Documents;

use Zoomyboy\Tex\Document;

abstract class ContributionDocument extends Document
{
    abstract public static function getName(): string;

    /**
     * @param ContributionRequestArray $request
     */
    abstract public static function fromRequest(array $request): self;

    /**
     * @param ContributionApiRequestArray $request
     */
    abstract public static function fromApiRequest(array $request): self;

    /**
     * @return array<string, mixed>
     */
    abstract public static function rules(): array;

    /**
     * @return array<string, mixed>
     */
    public static function globalRules(): array
    {
        return [
            'members' => 'present|array|min:1',
            'members.*' => 'integer|exists:members,id',
        ];
    }
}