create table sr_company_25.product
(
    id                    bigint unsigned auto_increment
        primary key,
    catalog               bigint unsigned                                                                                                                               default 0                   not null comment 'catalogo di origine',
    sku                   varchar(150)                                                                                                                                  default ''                  not null comment 'codice univoco del prodotto all''interno del catalog',
    catalog_category1     varchar(255)                                                                                                                                  default ''                  not null comment 'nome categoria catalogo di livello 1',
    catalog_category2     varchar(255)                                                                                                                                  default ''                  not null comment 'nome categoria catalogo di livello 2',
    catalog_category3     varchar(255)                                                                                                                                  default ''                  not null comment 'nome categoria catalogo di livello 3',
    channel_categories    text                                                                                                                                          default ''                  not null comment 'blob json delle categorie di pubblicazione del prodotto su specifici marketplace (channel); serve a bypassare la compilazione di shop_category_map lavorando direttamente sui singoli prodotti a monte (v. listing.channel_category); la forma dle json é {categories: [{channel: channel.id , category_id: ...}, ...]}',
    condition_description varchar(255)                                                                                                                                  default ''                  not null comment 'descrizione della condizione',
    sku_label             varchar(150)                                                                                                                                  default ''                  not null comment 'sku parlante o alternativo usato in casi rarissimi; non sostituisce lo sku ma può essere usato per l''invio al marketplace al posto di sku; ex-campo: label_input',
    title                 text                                                                                                                                          default ''                  not null comment 'titolo',
    subtitle              text                                                                                                                                          default ''                  not null comment 'sottotitolo',
    description           longtext                                                                                                                                      default ''                  not null comment 'descrizione dettagliata',
    description_extra     longtext                                                                                                                                      default ''                  not null comment 'descrizione extra',
    brand                 varchar(100)                                                                                                                                  default ''                  not null comment 'marchio (o produttore); questi valori vanno a popolare catalog_brand',
    lang                  varchar(5)                                                                                                                                    default ''                  not null comment 'codice ISO 639-1 della lingua',
    quantity              decimal(11, 2)                                                                                                                                default 0.00                not null comment 'quantità',
    availability          tinyint                                                                                                                                       default 0                   not null comment '1 indica che il prodotto è disponibile; normalmente è usato in alternativa a quantity ma se sono usati entrambi allora vanno sempre in OR',
    url                   text                                                                                                                                          default ''                  not null comment 'url della scheda prodotto',
    url_image1            text                                                                                                                                          default ''                  not null comment 'url immagine',
    url_image2            text                                                                                                                                          default ''                  not null comment 'url immagine',
    url_image3            text                                                                                                                                          default ''                  not null comment 'url immagine',
    url_image4            text                                                                                                                                          default ''                  not null comment 'url immagine',
    url_image5            text                                                                                                                                          default ''                  not null comment 'url immagine',
    url_image6            text                                                                                                                                          default ''                  not null comment 'url immagine',
    url_image7            text                                                                                                                                          default ''                  not null comment 'url immagine',
    url_image8            text                                                                                                                                          default ''                  not null comment 'url immagine',
    url_image9            text                                                                                                                                          default ''                  not null comment 'url immagine',
    price1                decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'prezzo',
    price2                decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'prezzo',
    price3                decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'prezzo',
    price4                decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'prezzo',
    price5                decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'prezzo',
    price6                decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'prezzo',
    price_shipping1       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione',
    price_shipping2       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione',
    price_shipping3       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione',
    price_shipping4       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione',
    price_shipping5       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione',
    price_shipping6       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione',
    fee_additional1       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione per oggetto aggiuntivo',
    fee_additional2       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione per oggetto aggiuntivo',
    fee_additional3       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione per oggetto aggiuntivo',
    fee_additional4       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione per oggetto aggiuntivo',
    fee_additional5       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione per oggetto aggiuntivo',
    fee_additional6       decimal(11, 4)                                                                                                                                default 0.0000              not null comment 'spese spedizione per oggetto aggiuntivo',
    vat_perc              decimal(5, 2)                                                                                                                                 default 0.00                not null comment 'iva percentuale',
    ean                   varchar(50)                                                                                                                                   default ''                  not null comment 'codice ean',
    isbn                  varchar(150)                                                                                                                                  default ''                  not null comment 'codice isbn',
    mpn                   varchar(150)                                                                                                                                  default ''                  not null comment 'codice produttore',
    asin                  varchar(255)                                                                                                                                  default ''                  not null comment 'codice prodotto amazon',
    fupid                 varchar(50)                                                                                                                                   default ''                  not null comment 'codice prodotto pix_place',
    weight                decimal(11, 3)                                                                                                                                default 0.000               not null comment 'peso',
    raee                  decimal(11, 2)                                                                                                                                default 0.00                not null comment 'tassa raee',
    variations            longtext                                                                                                                                                                  null comment 'blob json delle varianti',
    extra1                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    extra2                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    extra3                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    extra4                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    extra5                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    extra6                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    extra7                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    extra8                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    extra9                text                                                                                                                                          default ''                  not null comment 'campo extra (jolly)',
    item_note             text                                                                                                                                          default ''                  not null comment 'note oggetto',
    import_action         enum ('none', 'insert', 'update', 'deplete', 'delete')                                                                                        default 'none'              not null comment 'azione eseguita in fase di importazione: insert (prodotto nuovo), update (prodotto variato), deplete (prodotto esaurito), delete (prodotto uscito dal listino)',
    delivery_days         int                                                                                                                                           default 0                   not null comment 'giorni necessari a preparare la spedizione',
    channel_flags         varchar(255)                                                                                                                                  default ''                  not null comment 'marcatori usati per indicare che il prodotto è stato inviato almeno una volta su determinati channel',
    created               datetime                                                                                                                                      default current_timestamp() not null,
    modified              datetime                                                                                                                                      default current_timestamp() not null,
    run_request           bigint unsigned                                                                                                                               default 0                   not null comment 'id della run_request in corso di elaborazione associata al product',
    condition_code        enum ('none', 'new', 'used', 'refurbished_seller', 'refurbished_manufacturer', 'like_new', 'used_very_good', 'used_good', 'used_fairly_good') default 'none'              not null comment 'condizione del prodotto',
    description_changed   tinyint                                                                                                                                       default 0                   not null comment '1 per indicare che il campo descritpion è stato modificato',
    compatibility         longtext                                                                                                                                                                  null comment 'blob json contenente la chiave compatibility che punta ha un array di coppie  di attributi name, value',
    ean_new               varchar(50)                                                                                                                                   default ''                  not null comment 'valore che deve sostituire il valore di ean appena possibile, - per indicare che ean dovrà essere svuotato',
    attributes            longtext                                                                                                                                      default ''                  null comment 'blob json delle item specifics, attributi aggiuntivi dell''oggetto',
    is_variation          tinyint                                                                                                                                       default 0                   not null comment '1 per indicare che il prodotto è parte di un set di varianti',
    weight_um             varchar(5)                                                                                                                                    default ''                  null comment 'sigla unità di misura del peso',
    on_demand             tinyint                                                                                                                                       default 0                   not null comment '1 per indicare che il prodotto non è immediatamente disponibile',
    on_demand_days        tinyint                                                                                                                                       default 0                   not null comment 'numero di giorni entro cui effettuare la spedizione al buyer, da usare solo se on_demand=1',
    fields_lock           text                                                                                                                                          default ''                  null comment 'elenco separato da , dei campi soggetti a blocco dati perché gestiti a mano',
    warehouse             varchar(20)                                                                                                                                                               null comment 'codice del magazzino da cui proviene il prodotto',
    price_cost            decimal(11, 4)                                                                                                                                default 0.0000              null comment 'costo del prodotto',
    extra_info            longtext                                                                                                                                      default ''                  not null comment 'blob josn di info extra sul prodotto',
    has_variations        tinyint unsigned as (case
                                                   when `variations` = '' or `variations` is null or `variations` = '[]'
                                                       then 0
                                                   else json_valid(`variations`) end) stored,
    checks                longtext collate utf8mb4_unicode_ci                                                                                                           default '{}'                not null comment 'blob json di checks sul prodotto',
    promo                 tinyint                                                                                                                                       default 0                   not null comment '1 per indicare che il prodotto è in promo',
    constraint product_ibfk_1
        foreign key (catalog) references sr_company_25.catalog (id)
            on update cascade on delete cascade
)
    comment 'anagrafica dei prodotti' collate = utf8mb3_unicode_ci
                                      row_format = COMPRESSED;

create index asin
    on sr_company_25.product (asin);

create index brand_catalog
    on sr_company_25.product (brand, catalog);

create index catalog_category2
    on sr_company_25.product (catalog_category2);

create index catalog_category3
    on sr_company_25.product (catalog_category3);

create index catalog_category_123
    on sr_company_25.product (catalog_category1, catalog_category2, catalog_category3);

create index catalog_sku
    on sr_company_25.product (catalog, sku);

create index ean
    on sr_company_25.product (ean);

create index ean_new
    on sr_company_25.product (ean_new);

create index has_variations
    on sr_company_25.product (has_variations);

create index import_action
    on sr_company_25.product (import_action);

create index isbn
    on sr_company_25.product (isbn);

create index mpn
    on sr_company_25.product (mpn);

create index sku
    on sr_company_25.product (sku);

