-- t-paliad-131 Phase A1: paliad.deadline_concepts — the Unifier shape.
--
-- One concept = one legal idea ("Klageerwiderung", "Berufungsfrist",
-- "Wiedereinsetzung") that adapts duration / legal_source / notes per
-- proceeding-type context. Adding this layer above paliad.deadline_rules
-- lets the search bar group hits per concept (one card with proceeding
-- pills inside) instead of returning one row per (concept × proceeding).
--
-- Slug naming convention:
--   - EN slug for concepts native to UPC/EPC AND for shared concepts that
--     exist in both DE and UPC/EPC (statement-of-defence, reply-to-defence,
--     notice-of-appeal, opposition, re-establishment-of-rights). HLC primary
--     working surface is German for users but slugs are internal.
--   - DE slug only for concepts that exist exclusively in German law
--     (nichtzulassungsbeschwerde, versaeumnisurteil-einspruch,
--     hinweisbeschluss-stellungnahme).
--
-- party = the dominant case across contexts. Per-rule primary_party
-- override on paliad.deadline_rules takes precedence in the UI pill.

CREATE TABLE paliad.deadline_concepts (
    id          uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    slug        text NOT NULL UNIQUE,
    name_de     text NOT NULL,
    name_en     text NOT NULL,
    description text,
    aliases     text[] NOT NULL DEFAULT '{}',
    party       text,
    category    text NOT NULL DEFAULT 'submission'
                CHECK (category IN ('submission','decision','order','hearing','other')),
    sort_order  int  NOT NULL DEFAULT 100,
    is_active   bool NOT NULL DEFAULT true,
    created_at  timestamptz NOT NULL DEFAULT now(),
    updated_at  timestamptz NOT NULL DEFAULT now()
);

COMMENT ON TABLE paliad.deadline_concepts IS
    'The Unifier layer above paliad.deadline_rules. One row per legal '
    'concept (Klageerwiderung, Berufungsfrist, …); deadline_rules.concept_id '
    'links rule rows from different proceeding-types to the same concept.';

COMMENT ON COLUMN paliad.deadline_concepts.aliases IS
    'Synonyms (DE, EN, colloquial) the search bar matches against. '
    'Curated in seed migrations; not user-editable in v1.';

COMMENT ON COLUMN paliad.deadline_concepts.party IS
    'Dominant party across contexts (claimant / defendant / both / court). '
    'Per-rule paliad.deadline_rules.primary_party overrides for cases where '
    'a context has a different responsible party (e.g. EPA Einspruch '
    'Erwiderung is owed by the Patentinhaber, but the dominant case for '
    'the statement-of-defence concept is defendant).';

CREATE INDEX deadline_concepts_trgm_de ON paliad.deadline_concepts
    USING gin (name_de gin_trgm_ops);
CREATE INDEX deadline_concepts_trgm_en ON paliad.deadline_concepts
    USING gin (name_en gin_trgm_ops);
CREATE INDEX deadline_concepts_aliases ON paliad.deadline_concepts
    USING gin (aliases);
