<?php

namespace SilverStripe\Forms\Tests\GridField\GridFieldDetailFormTest;

use SilverStripe\Dev\TestOnly;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
use SilverStripe\Forms\RequiredFields;
use SilverStripe\ORM\DataObject;

class Person extends DataObject implements TestOnly
{
    private static $table_name = 'GridFieldDetailFormTest_Person';

    private static $db = [
        'FirstName' => 'Varchar',
        'Surname' => 'Varchar'
    ];

    private static $has_one = [
        'Group' => PeopleGroup::class
    ];

    private static $many_many = [
        'Categories' => Category::class,
        'FavouriteGroups' => PeopleGroup::class
    ];

    private static $many_many_extraFields = [
        'Categories' => [
            'IsPublished' => 'Boolean',
            'PublishedBy' => 'Varchar'
        ]
    ];

    private static $default_sort = '"FirstName"';

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();
        // TODO No longer necessary once FormScaffolder uses GridField
        $fields->replaceField(
            'Categories',
            GridField::create(
                'Categories',
                'Categories',
                $this->Categories(),
                GridFieldConfig_RelationEditor::create()
            )
        );
        $fields->replaceField(
            'FavouriteGroups',
            GridField::create(
                'FavouriteGroups',
                'Favourite Groups',
                $this->FavouriteGroups(),
                GridFieldConfig_RelationEditor::create()
            )
        );
        return $fields;
    }

    public function getCMSValidator()
    {
        return new RequiredFields(
            [
            'FirstName',
            'Surname'
            ]
        );
    }

    public function CMSEditLink()
    {
        return sprintf('my-admin/%d', $this->ID);
    }
}