CREATE TABLE IF NOT EXISTS dunning_levels (
    id INT AUTO_INCREMENT PRIMARY KEY,
    level_number INT NOT NULL UNIQUE,
    name VARCHAR(100) NOT NULL,
    fee DECIMAL(10,2) DEFAULT 0.00,
    payment_days INT DEFAULT 7,
    text_before TEXT,
    text_after TEXT,
    active TINYINT(1) DEFAULT 1
);

CREATE TABLE IF NOT EXISTS dunnings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    invoice_id INT NOT NULL,
    dunning_number VARCHAR(50) NOT NULL UNIQUE,
    level_id INT NOT NULL,
    dunning_date DATE NOT NULL,
    due_date DATE NULL,
    fee DECIMAL(10,2) DEFAULT 0.00,
    status ENUM('draft', 'sent', 'paid', 'cancelled') DEFAULT 'draft',
    notes TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL DEFAULT NULL,
    FOREIGN KEY (invoice_id) REFERENCES invoices(id) ON DELETE CASCADE,
    FOREIGN KEY (level_id) REFERENCES dunning_levels(id)
);

INSERT INTO dunning_levels (level_number, name, fee, payment_days, text_before, text_after, active)
SELECT 1, 'Zahlungserinnerung', 0.00, 7,
'bei der Prüfung unserer offenen Posten haben wir festgestellt, dass die folgende Rechnung noch nicht ausgeglichen wurde.',
'Bitte überweisen Sie den offenen Betrag innerhalb der genannten Frist. Sollten Sie die Zahlung bereits veranlasst haben, betrachten Sie dieses Schreiben bitte als gegenstandslos.',
1
WHERE NOT EXISTS (SELECT 1 FROM dunning_levels WHERE level_number = 1);

INSERT INTO dunning_levels (level_number, name, fee, payment_days, text_before, text_after, active)
SELECT 2, '1. Mahnung', 5.00, 7,
'trotz unserer Zahlungserinnerung konnten wir bisher keinen Zahlungseingang feststellen.',
'Bitte gleichen Sie den offenen Betrag inklusive Mahngebühr fristgerecht aus.',
1
WHERE NOT EXISTS (SELECT 1 FROM dunning_levels WHERE level_number = 2);

INSERT INTO dunning_levels (level_number, name, fee, payment_days, text_before, text_after, active)
SELECT 3, '2. Mahnung', 10.00, 7,
'leider konnten wir trotz vorheriger Mahnungen keinen Zahlungseingang feststellen.',
'Bitte begleichen Sie den offenen Betrag unverzüglich, um weitere Schritte zu vermeiden.',
1
WHERE NOT EXISTS (SELECT 1 FROM dunning_levels WHERE level_number = 3);

INSERT INTO number_ranges (type, prefix, current_number, padding, year_based, last_year)
SELECT 'dunning', 'MA-', 0, 5, 1, YEAR(CURDATE())
WHERE NOT EXISTS (SELECT 1 FROM number_ranges WHERE type = 'dunning');

INSERT INTO settings (name, value) VALUES
('number_format_dunning', '{PREFIX}{YEAR}-{NUMBER}'),
('dunning_footer', 'Sollten Sie Fragen zu dieser Mahnung haben, kontaktieren Sie uns bitte.'),
('dunning_place', 'Musterstadt')
ON DUPLICATE KEY UPDATE name = name;
