-- Questo file fa parte di MyTown.
-- MyTown è software libero: puoi ridistribuirlo e/o modificarlo secondo
-- i termini della GNU Affero General Public License come pubblicata dalla
-- Free Software Foundation, versione 3.
-- Distribuito senza ALCUNA GARANZIA; vedi la GNU AGPL v3 per i dettagli.
-- Copyright (C) Kondor Consulting & Services S.r.l.
-- SPDX-License-Identifier: AGPL-3.0-or-later

-- =============================================================================
--  Service card "Fotovoltaico" per l'app DataSmart
-- =============================================================================
--  Crea la card che compare nella Home dell'app e la collega a un'azienda.
--  Il "diritto a visualizzare" è gestito dalla VISIBILITÀ della card:
--    - srv_type = clausola di join che lega il servizio a una RELAZIONE
--      (di default: dipendenti dell'azienda -> cmp_employees);
--    - (opzionale) RUOLI AZIENDALI specifici, vedi blocco in fondo.
--
--  Lo script usa la funzione esistente add_service(...) — la stessa invocata dal
--  gestore servizi del portale (CompanyServicesMapper.xml -> addService) — così
--  l'inserimento in cmp_services + il collegamento all'azienda
--  (cmp_companies_services) avvengono in modo coerente.
--
--  DB: PostgreSQL (backend ws_spring_cmp).
-- =============================================================================

-- -----------------------------------------------------------------------------
-- 1) QUERY DI SUPPORTO — esegui prima queste per ricavare gli ID reali
-- -----------------------------------------------------------------------------
-- Azienda a cui assegnare il servizio (prendi cmp_id):
--   SELECT cmp_id, cmp_name FROM cmp_companies WHERE cmp_name ILIKE '%nome azienda%' ORDER BY cmp_name;
--
-- Categoria (macrogruppo) in cui mostrare la card — opzionale (csc_id):
--   SELECT csc_id, csc_name_view, csc_order FROM cmp_service_categories ORDER BY csc_order, csc_name_view;
--
-- Ruolo di portale richiesto — opzionale (srv_pt_rl_id; 0 = nessun vincolo di ruolo portale):
--   SELECT * FROM pt_roles ORDER BY 1;            -- (adatta il nome tabella se diverso)
--
-- Ruoli AZIENDALI per restringere ulteriormente la visibilità — opzionale:
--   SELECT * FROM cmp_roles WHERE cmp_rl_cmp_id = <cmp_id>;   -- (adatta nome tabella/colonna)

-- -----------------------------------------------------------------------------
-- 1-bis) PULIZIA righe "fotovoltaico" inserite a mano (malformate / non collegate).
--        Negli ambienti dove esistono già le righe id 63 e 71 (link vuoto o con
--        apici/virgola), rimuovile PRIMA di ricreare la card in modo corretto.
--        Adatta gli id a quelli del TUO ambiente (vedi SELECT del passo 1).
-- -----------------------------------------------------------------------------
--   SELECT delete_service(63);
--   SELECT delete_service(71);

-- -----------------------------------------------------------------------------
-- 2) CREAZIONE DELLA SERVICE CARD
-- -----------------------------------------------------------------------------
DO $do$
DECLARE
    -- >>> CONFIGURA QUESTI VALORI <<<
    v_cmp_id   integer := 16;     -- TODO: id azienda (vedi query di supporto)
    v_csc_id   integer := 4;      -- categoria: 4 = stessa di cantieri/assemblee (NULL = nessuna)
    v_pt_rl_id integer := 0;      -- TODO: ruolo portale richiesto (0 = nessuno)

    v_srv_id   integer;
BEGIN
    v_srv_id := add_service(
        v_pt_rl_id,                                                       -- srv_pt_rl_id
        'fotovoltaico',                                                   -- srv_name (chiave tecnica)
        'Fotovoltaico',                                                   -- srv_name_view (etichetta in app)
        'portale/${prt_id}/company/${cmp_id}/service/fotovoltaico',       -- srv_link (NB: senza slash iniziale, come cantieri)
        'pi pi-sun',                                                      -- srv_icon (PrimeIcons)
        'inner join cmp_employees on em_cmp_id = cmp_id and em_userid_portal =', -- srv_type: solo dipendenti azienda
        'Monitoraggio impianti fotovoltaici',                            -- srv_description
        'bg-gradient-fire',                                              -- srv_background_class
        TRUE,                                                            -- srv_show_icon
        TRUE,                                                            -- srv_enabled
        FALSE,                                                           -- srv_show_cmp_logo
        TRUE,                                                            -- srv_show_service_name
        TRUE,                                                            -- srv_show_company_name
        v_cmp_id,                                                        -- cmp_id (azienda)
        NULL::text,                                                      -- srv_background_image
        0.5::numeric,                                                    -- srv_background_opacity
        FALSE,                                                           -- srv_show_hero_image
        FALSE,                                                           -- srv_show_distance
        FALSE,                                                           -- srv_roles_require_all
        v_csc_id                                                         -- srv_csc_id (categoria)
    );

    RAISE NOTICE 'Service card "Fotovoltaico" creata: srv_id=%, cmp_id=%', v_srv_id, v_cmp_id;

    -- -------------------------------------------------------------------------
    -- 3) (OPZIONALE) Restringi a specifici RUOLI AZIENDALI
    --    Decommenta e indica gli id dei ruoli che possono vedere la card.
    --    Senza questo blocco la card è visibile a tutti i dipendenti dell'azienda
    --    (per via di srv_type = join su cmp_employees).
    -- -------------------------------------------------------------------------
    -- PERFORM cmp_save_service_cmp_roles(v_srv_id, v_cmp_id, ARRAY[/* rl_id1, rl_id2 */]::integer[]);
END
$do$;

-- -----------------------------------------------------------------------------
-- 4) VERIFICA — controlla che la card sia visibile per un utente (usr_id)
-- -----------------------------------------------------------------------------
--   SELECT srv_id, cmp_id, srv_name_view, srv_link, srv_type, srv_csc_id
--   FROM cmp_companies_services_lst(<usr_id>)
--   WHERE srv_link LIKE '%/service/fotovoltaico';

-- =============================================================================
--  NOTE
--  - srv_link viene salvato LETTERALMENTE con i placeholder ${prt_id} e ${cmp_id}:
--    l'app li sostituisce a runtime (service-cards.component.ts).
--  - Per riusare la card su più aziende, riesegui il blocco DO cambiando v_cmp_id
--    (oppure usa associate_preset_to_company se gestisci la card come preset).
--  - Per RIMUOVERE la card:  SELECT delete_service(<srv_id>);
-- =============================================================================
