SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS abs_insurance_types (
 id INT AUTO_INCREMENT PRIMARY KEY,
 code VARCHAR(50) NOT NULL UNIQUE,
 name VARCHAR(190) NOT NULL,
 category VARCHAR(100) NOT NULL,
 description TEXT NULL,
 status VARCHAR(30) NOT NULL DEFAULT 'active',
 sort_order INT NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS abs_insurers (
 id INT AUTO_INCREMENT PRIMARY KEY,
 legal_name VARCHAR(255) NOT NULL,
 short_name VARCHAR(120) NULL,
 insurer_type VARCHAR(30) NOT NULL DEFAULT 'general',
 registration_country VARCHAR(5) NOT NULL DEFAULT 'RO',
 asf_register_no VARCHAR(100) NULL,
 cui VARCHAR(30) NULL,
 website VARCHAR(500) NULL,
 broker_portal_url VARCHAR(500) NULL,
 claims_url VARCHAR(500) NULL,
 email_general VARCHAR(190) NULL,
 email_broker VARCHAR(190) NULL,
 email_claims VARCHAR(190) NULL,
 phone_general VARCHAR(100) NULL,
 phone_claims VARCHAR(100) NULL,
 contact_person VARCHAR(190) NULL,
 contact_phone VARCHAR(100) NULL,
 contact_email VARCHAR(190) NULL,
 address TEXT NULL,
 notes TEXT NULL,
 status VARCHAR(30) NOT NULL DEFAULT 'verify',
 source VARCHAR(100) NULL,
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP,
 KEY idx_abs_insurers_short_name(short_name),
 KEY idx_abs_insurers_status(status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS abs_insurer_forms (
 id INT AUTO_INCREMENT PRIMARY KEY,
 insurer_id INT NULL,
 insurance_type_id INT NULL,
 name VARCHAR(255) NOT NULL,
 form_type VARCHAR(50) NOT NULL,
 description TEXT NULL,
 external_url VARCHAR(500) NULL,
 template_file VARCHAR(500) NULL,
 required_documents LONGTEXT NULL,
 instructions LONGTEXT NULL,
 status VARCHAR(30) NOT NULL DEFAULT 'active',
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP,
 FOREIGN KEY(insurer_id) REFERENCES abs_insurers(id) ON DELETE CASCADE,
 FOREIGN KEY(insurance_type_id) REFERENCES abs_insurance_types(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS abs_insurance_quotes (
 id INT AUTO_INCREMENT PRIMARY KEY,
 reference VARCHAR(80) NOT NULL UNIQUE,
 insurance_type_id INT NOT NULL,
 client_name VARCHAR(190) NOT NULL,
 client_identifier VARCHAR(30) NULL,
 phone VARCHAR(100) NULL,
 email VARCHAR(190) NULL,
 vehicle_plate VARCHAR(30) NULL,
 vehicle_vin VARCHAR(17) NULL,
 start_date DATE NULL,
 request_payload LONGTEXT NULL,
 response_payload LONGTEXT NULL,
 selected_offer_payload LONGTEXT NULL,
 external_request_id VARCHAR(190) NULL,
 status VARCHAR(30) NOT NULL DEFAULT 'draft',
 source VARCHAR(30) NOT NULL DEFAULT 'local',
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP,
 FOREIGN KEY(insurance_type_id) REFERENCES abs_insurance_types(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS abs_broker_api_config (
 id INT AUTO_INCREMENT PRIMARY KEY,
 provider VARCHAR(50) NOT NULL DEFAULT '24broker',
 environment VARCHAR(30) NOT NULL DEFAULT 'test',
 base_url VARCHAR(500) NULL,
 auth_url VARCHAR(500) NULL,
 quote_url VARCHAR(500) NULL,
 policy_url VARCHAR(500) NULL,
 username VARCHAR(190) NULL,
 client_id VARCHAR(255) NULL,
 client_secret TEXT NULL,
 api_key TEXT NULL,
 access_token LONGTEXT NULL,
 enabled TINYINT(1) NOT NULL DEFAULT 0,
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT IGNORE INTO abs_insurance_types(code,name,category,description,sort_order) VALUES
('RCA','RCA','Auto','Răspundere civilă auto obligatorie',10),
('CASCO','CASCO','Auto','Asigurare facultativă a vehiculului',20),
('CMR','CMR transportator','Transport','Răspunderea transportatorului rutier',30),
('CARGO','Cargo','Transport','Asigurarea bunurilor transportate',40),
('PAD','PAD','Locuință','Asigurarea obligatorie a locuinței',50),
('HOME','Locuință facultativă','Locuință','Clădire, conținut și răspunderi',60),
('TRAVEL','Călătorie','Persoane','Asigurare medicală pentru călătorii',70),
('ACCIDENT','Accidente persoane','Persoane','Accidente individuale sau de grup',80),
('HEALTH','Sănătate','Persoane','Asigurare privată de sănătate',90),
('LIFE','Viață','Viață','Protecție, economisire sau investiție',100),
('PROF_LIAB','Răspundere profesională','Răspunderi','Malpraxis și răspunderi profesionale',110),
('GENERAL_LIAB','Răspundere civilă generală','Răspunderi','Răspundere față de terți',120),
('EMPLOYER_LIAB','Răspunderea angajatorului','Răspunderi','Accidente de muncă și răspunderea angajatorului',130),
('PROPERTY','Bunuri și clădiri','Proprietăți','Incendiu și alte riscuri pentru companii',140),
('EQUIPMENT','Utilaje și echipamente','Proprietăți','Avarii accidentale și echipamente electronice',150),
('CONSTRUCTION','CAR/EAR construcții-montaj','Inginerie','Lucrări de construcții și montaj',160),
('AGRICULTURE','Agricolă','Agricol','Culturi, animale și exploatații',170),
('CYBER','Cyber','Speciale','Riscuri cibernetice și incidente de date',180),
('GUARANTEE','Garanții','Garanții','Garanții contractuale și comerciale',190),
('ASSISTANCE','Asistență','Asistență','Asistență rutieră și servicii',200);

INSERT INTO abs_insurers
(legal_name,short_name,insurer_type,registration_country,website,status,source,notes)
VALUES
('ALLIANZ-TIRIAC ASIGURARI S.A.','Allianz-Țiriac','composite','RO','https://www.allianztiriac.ro','verify','ASF 2026','Verifică în registrul ASF și completează portalul de broker.'),
('ASIGURAREA ROMANEASCA - ASIROM VIENNA INSURANCE GROUP S.A.','ASIROM','general','RO','https://www.asirom.ro','verify','ASF 2026',''),
('GENERALI ROMANIA ASIGURARE REASIGURARE S.A.','Generali','composite','RO','https://www.generali.ro','verify','ASF 2026',''),
('GRAWE ROMANIA ASIGURARE S.A.','GRAWE','composite','RO','https://www.grawe.ro','verify','ASF 2026',''),
('GROUPAMA ASIGURARI S.A.','Groupama','general','RO','https://www.groupama.ro','verify','ASF 2026',''),
('OMNIASIG VIENNA INSURANCE GROUP S.A.','OMNIASIG','general','RO','https://www.omniasig.ro','verify','ASF 2026',''),
('UNIQA ASIGURARI S.A.','UNIQA','general','RO','https://www.uniqa.ro','verify','ASF 2026',''),
('GARANTA ASIGURARI S.A.','Garanta','composite','RO','https://www.garanta.ro','verify','ASF 2026',''),
('SIGNAL IDUNA ASIGURARE REASIGURARE S.A.','SIGNAL IDUNA','general','RO','https://www.signal-iduna.ro','verify','ASF 2026',''),
('EAZY ASIGURARI S.A.','Eazy Asigurări','general','RO','https://www.eazyinsure.ro','verify','ASF/market','Verifică clasele autorizate și datele oficiale.'),
('AXERIA IARD - SUCURSALA BUCURESTI','Axeria IARD','branch','FR','https://www.axeria.fr','verify','SEE/ASF','Sucursala/operare SEE; verifică registrul ASF.'),
('HELLAS DIRECT INSURANCE LTD - SUCURSALA BUCURESTI','Hellas Direct','branch','CY','https://www.hellasdirect.ro','verify','SEE/ASF','Verifică statutul și clasele distribuite.'),
('NN ASIGURARI DE VIATA S.A.','NN Viață','life','RO','https://www.nn.ro','verify','ASF 2026',''),
('METROPOLITAN LIFE ASIGURARI METLIFE EUROPE D.A.C. DUBLIN SUCURSALA BUCURESTI','Metropolitan Life','life','IE','https://www.metropolitanlife.ro','verify','SEE/ASF',''),
('BCR ASIGURARI DE VIATA VIENNA INSURANCE GROUP S.A.','BCR Asigurări de Viață','life','RO','https://www.bcr.ro','verify','ASF 2026',''),
('BRD ASIGURARI DE VIATA S.A.','BRD Asigurări de Viață','life','RO','https://www.brd.ro','verify','ASF 2026',''),
('UNIQA ASIGURARI DE VIATA S.A.','UNIQA Viață','life','RO','https://www.uniqa.ro','verify','ASF 2026',''),
('EUROLIFE FFH ASIGURARI DE VIATA S.A.','Eurolife FFH Viață','life','RO','https://www.eurolife-asigurari.ro','verify','ASF/market',''),
('EUROLIFE FFH ASIGURARI GENERALE S.A.','Eurolife FFH Generale','general','RO','https://www.eurolife-asigurari.ro','verify','ASF/market',''),
('SIGNAL IDUNA ASIGURARI S.A.','SIGNAL IDUNA Viață/Sănătate','life','RO','https://www.signal-iduna.ro','verify','ASF/market','');

INSERT INTO abs_insurer_forms(insurer_id,insurance_type_id,name,form_type,description,required_documents,instructions,status)
SELECT NULL,NULL,'Cerere restituire / recuperare primă','premium_refund',
'Model general pentru solicitarea restituirii diferenței de primă.',
'Cerere semnată; copie CI/CUI; polița; dovada încetării riscului; extras de cont; alte documente solicitate de asigurător.',
'Selectează asigurătorul și adaptează cerințele specifice înainte de transmitere.','active'
WHERE NOT EXISTS(SELECT 1 FROM abs_insurer_forms WHERE name='Cerere restituire / recuperare primă');

INSERT INTO abs_insurer_forms(insurer_id,insurance_type_id,name,form_type,description,required_documents,instructions,status)
SELECT NULL,NULL,'Cerere modificare poliță','policy_change',
'Model general pentru modificarea datelor contractului de asigurare.',
'Cerere semnată; polița; documente justificative; CI/CUI; talon/act proprietate, după caz.',
'Verifică dacă asigurătorul acceptă transmitere online sau solicită formular propriu.','active'
WHERE NOT EXISTS(SELECT 1 FROM abs_insurer_forms WHERE name='Cerere modificare poliță');
