package com.dacrt.SBIABackend.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// =========================================================
// SCIM Group Resource (Representa un Rol en tu DB)
// =========================================================
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ScimGroup {

    // Schemas obligatorios para el recurso Group
    private final List<String> schemas = Collections.singletonList("urn:ietf:params:scim:schemas:core:2.0:Group");
    private String id;
    private String displayName;

    @JsonProperty("meta")
    private Map<String, Object> meta;

    public ScimGroup(String id, String displayName) {
        this.id = id;
        this.displayName = displayName;
        this.meta = createMeta(id); // Genera la metadata SCIM
    }

    /**
     * Crea la metadata SCIM (created, lastModified, location)
     * Compatible con Java 8.
     */
    private Map<String, Object> createMeta(String resourceId) {
        String now = ZonedDateTime.now().format(DateTimeFormatter.ISO_INSTANT);
        Map<String, Object> metaMap = new HashMap<>();
        metaMap.put("resourceType", "Group");
        metaMap.put("created", now);
        metaMap.put("lastModified", now);
        metaMap.put("location", "/scim/v2/Groups/" + resourceId);
        return metaMap;
    }

    // Getters
    public List<String> getSchemas() { return schemas; }
    public String getId() { return id; }
    public String getDisplayName() { return displayName; }
    public Map<String, Object> getMeta() { return meta; }

    // Setters (se pueden omitir si solo se usa el constructor)
    public void setId(String id) { this.id = id; }
    public void setDisplayName(String displayName) { this.displayName = displayName; }
    public void setMeta(Map<String, Object> meta) { this.meta = meta; }
}