CREATE DATABASE IF NOT EXISTS inventory_db;

USE inventory_db;

CREATE TABLE IF NOT EXISTS items (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    serial_number VARCHAR(100) NULL,
    picture VARCHAR(255) NULL,
    quantity INT(11) NOT NULL DEFAULT 0,
    price DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS rental_prices (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    item_id INT(11) NOT NULL,
    client_id INT(11) NULL,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    daily_price DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (item_id) REFERENCES items(id) ON DELETE CASCADE,
    FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE SET NULL,
    INDEX idx_item_dates (item_id, start_date, end_date)
);

CREATE TABLE IF NOT EXISTS attachments (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    item_id INT(11) NOT NULL,
    filename VARCHAR(255) NOT NULL,
    original_name VARCHAR(255) NOT NULL,
    file_type ENUM('receipt', 'warranty', 'other') NOT NULL DEFAULT 'other',
    file_path VARCHAR(255) NOT NULL,
    file_size INT(11) NOT NULL,
    mime_type VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (item_id) REFERENCES items(id) ON DELETE CASCADE,
    INDEX idx_item_type (item_id, file_type)
);

CREATE TABLE IF NOT EXISTS clients (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    company_name VARCHAR(255) NULL,
    y_tunnus VARCHAR(255) NULL,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    phone VARCHAR(20) NULL,
    address VARCHAR(255) NULL,
    city VARCHAR(100) NULL,
    state VARCHAR(100) NULL,
    postal_code VARCHAR(20) NULL,
    country VARCHAR(100) NULL,
    notes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_email (email),
    INDEX idx_name (last_name, first_name),
    INDEX idx_y_tunnus (y_tunnus)
);

CREATE TABLE IF NOT EXISTS contact_persons (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    client_id INT(11) NOT NULL,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    email VARCHAR(255) NULL,
    phone VARCHAR(20) NULL,
    position VARCHAR(100) NULL,
    is_primary BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE CASCADE,
    INDEX idx_client_primary (client_id, is_primary),
    INDEX idx_name (last_name, first_name)
);

CREATE TABLE IF NOT EXISTS invoices (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    client_id INT(11) NOT NULL,
    invoice_number VARCHAR(50) NOT NULL UNIQUE,
    issue_date DATE NOT NULL,
    due_date DATE NOT NULL,
    status ENUM('draft', 'sent', 'paid', 'overdue', 'cancelled') DEFAULT 'draft',
    subtotal DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    tax_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    total_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    notes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE RESTRICT,
    INDEX idx_client_status (client_id, status),
    INDEX idx_invoice_number (invoice_number),
    INDEX idx_due_date (due_date)
);

CREATE TABLE IF NOT EXISTS invoice_items (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    invoice_id INT(11) NOT NULL,
    item_id INT(11) NOT NULL,
    description VARCHAR(255) NOT NULL,
    quantity DECIMAL(10,2) NOT NULL DEFAULT 1.00,
    unit_price DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    line_total DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (invoice_id) REFERENCES invoices(id) ON DELETE CASCADE,
    FOREIGN KEY (item_id) REFERENCES items(id) ON DELETE RESTRICT,
    INDEX idx_invoice (invoice_id),
    INDEX idx_item (item_id)
);

CREATE TABLE IF NOT EXISTS payments (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    invoice_id INT(11) NULL,
    client_id INT(11) NOT NULL,
    payment_date DATE NOT NULL,
    amount DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    payment_method ENUM('cash', 'check', 'credit_card', 'bank_transfer', 'other') DEFAULT 'cash',
    reference_number VARCHAR(50) NULL,
    notes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (invoice_id) REFERENCES invoices(id) ON DELETE SET NULL,
    FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE RESTRICT,
    INDEX idx_invoice (invoice_id),
    INDEX idx_client (client_id),
    INDEX idx_payment_date (payment_date)
);

CREATE TABLE IF NOT EXISTS chart_of_accounts (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    account_number VARCHAR(20) NOT NULL UNIQUE,
    account_name VARCHAR(255) NOT NULL,
    account_type ENUM('asset', 'liability', 'equity', 'revenue', 'expense') NOT NULL,
    parent_id INT(11) NULL,
    description TEXT NULL,
    opening_balance DECIMAL(10,2) DEFAULT 0.00,
    current_balance DECIMAL(10,2) DEFAULT 0.00,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (parent_id) REFERENCES chart_of_accounts(id) ON DELETE SET NULL,
    INDEX idx_account_type (account_type),
    INDEX idx_parent (parent_id),
    INDEX idx_account_number (account_number)
);

CREATE TABLE IF NOT EXISTS journal_entries (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    entry_number VARCHAR(50) NOT NULL UNIQUE,
    entry_date DATE NOT NULL,
    description TEXT NULL,
    reference_number VARCHAR(50) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_entry_date (entry_date),
    INDEX idx_entry_number (entry_number)
);

CREATE TABLE IF NOT EXISTS account_transactions (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    journal_entry_id INT(11) NOT NULL,
    account_id INT(11) NOT NULL,
    debit_amount DECIMAL(10,2) DEFAULT 0.00,
    credit_amount DECIMAL(10,2) DEFAULT 0.00,
    description TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (journal_entry_id) REFERENCES journal_entries(id) ON DELETE CASCADE,
    FOREIGN KEY (account_id) REFERENCES chart_of_accounts(id) ON DELETE RESTRICT,
    INDEX idx_journal_entry (journal_entry_id),
    INDEX idx_account (account_id),
    INDEX idx_debit_credit (debit_amount, credit_amount)
);

CREATE TABLE IF NOT EXISTS users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(255) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    role ENUM('admin', 'manager', 'user') DEFAULT 'user',
    is_active BOOLEAN DEFAULT TRUE,
    last_login TIMESTAMP NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_username (username),
    INDEX idx_email (email),
    INDEX idx_role (role),
    INDEX idx_active (is_active)
);

CREATE TABLE IF NOT EXISTS projects (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    customer_id INT(11) NOT NULL,
    project_name VARCHAR(255) NOT NULL,
    description TEXT NULL,
    status ENUM('planning', 'in_progress', 'completed', 'on_hold', 'cancelled') DEFAULT 'planning',
    start_date DATE NULL,
    end_date DATE NULL,
    budget DECIMAL(10,2) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (customer_id) REFERENCES clients(id) ON DELETE CASCADE,
    INDEX idx_customer (customer_id),
    INDEX idx_status (status),
    INDEX idx_dates (start_date, end_date)
);

CREATE TABLE IF NOT EXISTS subprojects (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    project_id INT(11) NOT NULL,
    subproject_name VARCHAR(255) NOT NULL,
    description TEXT NULL,
    status ENUM('planning', 'in_progress', 'completed', 'on_hold', 'cancelled') DEFAULT 'planning',
    start_date DATE NULL,
    end_date DATE NULL,
    budget DECIMAL(10,2) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
    INDEX idx_project (project_id),
    INDEX idx_status (status),
    INDEX idx_dates (start_date, end_date)
);

-- Accounting tables
CREATE TABLE IF NOT EXISTS accounting_entries (
    id INT AUTO_INCREMENT PRIMARY KEY,
    entry_date DATE NOT NULL,
    description TEXT NOT NULL,
    entry_type ENUM('Tulo', 'Kulu') NOT NULL,
    category VARCHAR(100),
    tax_free_amount DECIMAL(12,2) DEFAULT 0.00,
    vat_percentage DECIMAL(5,2) DEFAULT 0.00,
    vat_25_5 DECIMAL(12,2) DEFAULT 0.00,
    vat_14 DECIMAL(12,2) DEFAULT 0.00,
    vat_10 DECIMAL(12,2) DEFAULT 0.00,
    total_amount DECIMAL(12,2) DEFAULT 0.00,
    net_amount DECIMAL(12,2) DEFAULT 0.00,
    vat_amount DECIMAL(12,2) DEFAULT 0.00,
    reference_number VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_entry_date (entry_date),
    INDEX idx_entry_type (entry_type),
    INDEX idx_category (category)
);

CREATE TABLE IF NOT EXISTS accounting_categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    category_code VARCHAR(20) NOT NULL,
    category_name VARCHAR(200) NOT NULL,
    category_type ENUM('Tulo', 'Kulu') NOT NULL,
    vat_percentage DECIMAL(5,2) DEFAULT 0.00,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY unique_category_code (category_code)
);

CREATE TABLE IF NOT EXISTS accounting_category_group_names (
    id INT AUTO_INCREMENT PRIMARY KEY,
    category_group_code VARCHAR(3) NOT NULL,
    category_group_name VARCHAR(200) NOT NULL,
    description TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY unique_category_group_code (category_group_code)
);

CREATE TABLE IF NOT EXISTS monthly_summaries (
    id INT AUTO_INCREMENT PRIMARY KEY,
    year INT NOT NULL,
    month INT NOT NULL,
    total_income DECIMAL(12,2) DEFAULT 0.00,
    total_expenses DECIMAL(12,2) DEFAULT 0.00,
    net_result DECIMAL(12,2) DEFAULT 0.00,
    vat_payable DECIMAL(12,2) DEFAULT 0.00,
    vat_deductible DECIMAL(12,2) DEFAULT 0.00,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY unique_year_month (year, month)
);

-- Additional tables for project management
CREATE TABLE IF NOT EXISTS costs (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    description VARCHAR(255) NOT NULL,
    amount DECIMAL(10,2) NOT NULL,
    cost_date DATE NOT NULL,
    category VARCHAR(100) NOT NULL DEFAULT 'other',
    supplier VARCHAR(255) NULL,
    invoice_number VARCHAR(100) NULL,
    account_id INT(11) NULL,
    payment_method VARCHAR(50) NULL,
    receipt_number VARCHAR(100) NULL,
    notes TEXT NULL,
    created_by INT(11) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_cost_date (cost_date),
    INDEX idx_category (category),
    INDEX idx_supplier (supplier),
    INDEX idx_account_id (account_id),
    INDEX idx_created_by (created_by)
);

CREATE TABLE IF NOT EXISTS timers (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    task_id INT(11) NULL,
    user_id INT(11) NOT NULL,
    start_time TIMESTAMP NULL,
    end_time TIMESTAMP NULL,
    duration VARCHAR(8) NULL,
    description TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_task_id (task_id),
    INDEX idx_user_id (user_id),
    INDEX idx_start_time (start_time)
);

CREATE TABLE IF NOT EXISTS expense_categories (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    category_code VARCHAR(50) NOT NULL UNIQUE,
    category_name VARCHAR(200) NOT NULL,
    parent_id INT(11) NULL,
    description TEXT NULL,
    is_active TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_parent_id (parent_id)
);

CREATE TABLE IF NOT EXISTS income_categories (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    category_code VARCHAR(50) NOT NULL UNIQUE,
    category_name VARCHAR(200) NOT NULL,
    parent_id INT(11) NULL,
    description TEXT NULL,
    is_active TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_parent_id (parent_id)
);

CREATE TABLE IF NOT EXISTS incomes (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    description VARCHAR(255) NOT NULL,
    amount DECIMAL(10,2) NOT NULL,
    income_date DATE NOT NULL,
    category VARCHAR(100) NOT NULL DEFAULT 'other',
    client_id INT(11) NULL,
    invoice_id INT(11) NULL,
    account_id INT(11) NULL,
    payment_method VARCHAR(50) NULL,
    reference_number VARCHAR(100) NULL,
    notes TEXT NULL,
    created_by INT(11) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_income_date (income_date),
    INDEX idx_category (category),
    INDEX idx_client_id (client_id),
    INDEX idx_invoice_id (invoice_id),
    INDEX idx_account_id (account_id),
    INDEX idx_created_by (created_by)
);

CREATE TABLE IF NOT EXISTS work_hours (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    task_id INT(11) NOT NULL,
    user_id INT(11) NOT NULL,
    date DATE NOT NULL,
    hours DECIMAL(5,2) NOT NULL,
    description TEXT NULL,
    rate DECIMAL(10,2) NULL,
    total_amount DECIMAL(10,2) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_task_id (task_id),
    INDEX idx_user_id (user_id),
    INDEX idx_date (date)
);

-- Insert wavium admin user
INSERT INTO users (username, email, password_hash, first_name, last_name, role, is_active) VALUES 
('admin', 'admin@inventory.com', '$2y$10$lIA8wG6lU0l93lacHNBS0uSGSfwqaceQpGEupzSatNcN7oG/yowC2', 'Admin', 'User', 'admin', TRUE);

-- Insert expense categories data
INSERT IGNORE INTO expense_categories (category_code, category_name, parent_id, description, is_active) VALUES
('333', 'Ostot ja ulkopuoliset palvelut', NULL, 'Purchases and external services', 1),
('334', 'Henkilöstökulut', NULL, 'Personnel costs', 1),
('335', 'Poistot, edustuskulut ja vuokrat', NULL, 'Depreciation, representation and rental costs', 1),
('336', 'Muut vähennyskelpoiset kulut', NULL, 'Other deductible expenses', 1),
('337', 'Rahoituskulut', NULL, 'Financing costs', 1),
('341', 'Varausten muutokset', NULL, 'Asset changes', 1),
('343', 'Varausten myynnit', NULL, 'Asset sales', 1),
('344', 'Matkakulut', NULL, 'Travel expenses', 1),
('344 Ajoneuvo', 'Matkakulut - Kulkuneuvo', NULL, 'Vehicle travel expenses', 1),
('344 Kokous', 'Matkakulut - Kokous', NULL, 'Meeting travel expenses', 0),
('344 Matka-auto', 'Matkakulut - Auto', NULL, 'Car travel expenses', 1),
('344 Muu', 'Matkakulut - Muu', NULL, 'Other travel expenses', 1),
('346', 'Muut kulut', NULL, 'Other expenses', 1),
('349', 'Poistot', NULL, 'Depreciation', 1),
('353', 'Varainsiirrot', NULL, 'Asset transfers', 1),
('354', 'Vähennyskelvottomat kulut', NULL, 'Non-deductible expenses', 1),
('365', 'Vakuutukset', NULL, 'Insurance', 1),
('366', 'Verot ja maksut', NULL, 'Taxes and fees', 1),
('367', 'Yhtiölainat ja muut rahoituskulut', NULL, 'Company loans and other financing costs', 1);

-- Insert income categories data
INSERT IGNORE INTO income_categories (category_code, category_name, parent_id, description, is_active) VALUES
('300', 'Myynti - EU', NULL, 'Sales - EU', 1),
('300 - 255', 'Myynti - EU 25,5%', NULL, 'Sales - EU 25,5%', 1),
('301', 'Myynti - Muut maat', NULL, 'Sales - Other countries', 1),
('302', 'Myynti - Käänteinen vero', NULL, 'Sales - Reverse VAT', 1),
('303', 'Myynti - Suomi 0%', NULL, 'Sales - Finland 0%', 1),
('303 - 255', 'Myynti - Suomi 25,5%', NULL, 'Sales - Finland 25,5%', 1),
('308', 'Myyntitavarat', NULL, 'Sales of fixed assets', 1),
('309', 'Osuuskorvaukset', NULL, 'Share compensation', 1),
('310', 'Korkotulot ja muut rahoitustuotot', NULL, 'Interest income and other financial income', 1),
('311', 'Voitonjako', NULL, 'Profit distribution', 1),
('312', 'Sijoitustoiminnan tuotot', NULL, 'Investment income', 1),
('313', 'Apurahat ja muut avustukset', NULL, 'Grants and other subsidies', 1),
('314', 'Muu tuotto', NULL, 'Other income', 1);

-- Insert default accounting categories
INSERT IGNORE INTO accounting_categories (category_code, category_name, category_type, vat_percentage) VALUES
('300 - E0', 'Myynti - EU 0%', 'Tulo', 0.00),
('300 - E255', 'Myynti - EU 25,5%', 'Tulo', 25.50),
('300 - K', 'Myynti - Käänteinen vero', 'Tulo', 0.00),
('300 - M0', 'Myynti - Muut maat', 'Tulo', 0.00),
('300 - S0', 'Myynti - Suomi 0%', 'Tulo', 0.00),
('300 - S255', 'Myynti - Suomi 25,5%', 'Tulo', 25.50),
('301', 'Muut tuotot', 'Tulo', 0.00),
('312', 'Varausten vähennys', 'Tulo', 0.00),
('313', 'Auton yksityiskäyttö', 'Tulo', 0.00),
('314', 'Tavaroiden yksityiskäyttö', 'Tulo', 0.00),
('315', 'Muu yksityiskäyttö', 'Tulo', 0.00),
('317', 'Tuloslaskelman verovapaat tuotot', 'Tulo', 0.00),
('318', 'Saadut avustukset ja tuet', 'Tulo', 0.00),
('319', 'Saadut osingot', 'Tulo', 0.00),
('320', 'Osinkojen veronalainen osuus', 'Tulo', 0.00),
('323', 'Korkotuotot ja muut rahoitustuotot', 'Tulo', 0.00),
('324', 'Muut veronalaiset tuotot', 'Tulo', 0.00),
('333', 'Ostot ja varastojen muutokset', 'Kulu', 25.50),
('334', 'Ulkopuoliset palvelut', 'Kulu', 25.50),
('335', 'Palkat ja palkkiot', 'Kulu', 0.00),
('336', 'Eläke- ja henkilösivukulut', 'Kulu', 0.00),
('337', 'Poistot', 'Kulu', 0.00),
('341', 'Edustuskulut', 'Kulu', 0.00),
('343', 'Vuokrat', 'Kulu', 25.50),
('344 - A', 'Ajoneuvokulut', 'Kulu', 25.50),
('344 - K', 'Kokous- ja neuvottelukulut', 'Kulu', 25.50),
('344 - M', 'Matkakulut', 'Kulu', 25.50),
('344 - O', 'Muut vähennyskelpoiset kulut', 'Kulu', 25.50),
('346', 'Korkokulut', 'Kulu', 0.00),
('349', 'Muut rahoituskulut', 'Kulu', 0.00),
('353', 'Varausten lisäykset', 'Kulu', 0.00),
('354', 'Kirjanpidon ulkopuoliset vähennyskelpoiset kulut', 'Kulu', 0.00),
('365', 'Välittömät verot', 'Kulu', 0.00),
('366', 'Sakot ja muut rangaistusmaksut', 'Kulu', 0.00),
('367', 'Muut vähennyskelvottomat kulut', 'Kulu', 0.00),
('368', 'Julkinen liikenne', 'Kulu', 10.00);

-- Insert default category groups
INSERT IGNORE INTO accounting_category_group_names (category_group_code, category_group_name, description) VALUES
('300', 'Tuotot ammatista', NULL),
('301', 'Muut tuotot', NULL),
('312', 'Varausten vähennys', NULL),
('313', 'Auton yksityiskäyttö', NULL),
('314', 'Tavaroiden yksityiskäyttö', NULL),
('315', 'Muu yksityiskäyttö', NULL),
('317', 'Tuloslaskelman verovapaat tuotot', NULL),
('318', 'Saadut avustukset ja tuet', NULL),
('319', 'Saadut osingot', NULL),
('323', 'Korkotuotot ja muut rahoitustuotot', NULL),
('324', 'Muut veronalaiset tuotot', NULL),
('333', 'Ostot ja varastojen muutokset', NULL),
('334', 'Ulkopuoliset palvelut', NULL),
('335', 'Palkat ja palkkiot', NULL),
('336', 'Eläke- ja henkilösivukulut', NULL),
('337', 'Poistot', NULL),
('341', 'Edustuskulut', NULL),
('343', 'Vuokrat', NULL),
('344', 'Matkakulut', NULL),
('346', 'Korkokulut', NULL),
('349', 'Muut rahoituskulut', NULL),
('353', 'Varausten lisäykset', NULL),
('354', 'Kirjanpidon ulkopuoliset vähennyskelpoiset kulut', NULL),
('358', 'Elinkeinotoiminnan tulos', NULL),
('359', 'Elinkeinotoiminnan tappio', NULL),
('365', 'Välittömät verot', NULL),
('366', 'Sakot ja muut rangaistusmaksut', NULL),
('367', 'Muut vähennyskelvottomat kulut', NULL),
('368', 'Julkinen liikenne', NULL);

-- Insert chart of accounts
INSERT IGNORE INTO chart_of_accounts (account_number, account_name, account_type, parent_id, description, opening_balance, current_balance, is_active) VALUES
('1000', 'Käyttöpääoma', 'asset', NULL, 'Pääomaisuus', 0.00, 0.00, TRUE),
('1100', 'Saamiset ja vaatimukset', 'asset', NULL, 'Tase-erät ja poistot', 0.00, 0.00, TRUE),
('1200', 'Aineelliset vaihto-omaisuudet', 'asset', NULL, 'Varasto ja raaka-aineet', 0.00, 0.00, TRUE),
('1300', 'Pitkän aikaiset sijoitukset', 'asset', NULL, 'Pitkän aikaiset sijoitukset', 0.00, 0.00, TRUE),
('1400', 'Kiinteistöt', 'asset', NULL, 'Kiinteistöt ja rakennukset', 0.00, 0.00, TRUE),
('1500', 'Koneet ja kalusto', 'asset', NULL, 'Koneet, kalusto ja laitteet', 0.00, 0.00, TRUE),
('1600', 'Aineettomat varat', 'asset', NULL, 'Aineettomat varat', 0.00, 0.00, TRUE),
('1700', 'Sijoitukset rahoituslaitoksissa', 'asset', NULL, 'Rahoituslaitokset', 0.00, 0.00, TRUE),
('1800', 'Erityiset vaihto-omaisuudet', 'asset', NULL, 'Erityiset vaihto-omaisuudet', 0.00, 0.00, TRUE),
('1900', 'Vaihto-omaisuudet luovutukseen', 'asset', NULL, 'Myyntikohteiset varat', 0.00, 0.00, TRUE),
('2000', 'Oma pääoma', 'liability', NULL, 'Oma pääoma', 0.00, 0.00, TRUE),
('2100', 'Pitkän aikaiset velat', 'liability', NULL, 'Pitkän aikaiset velat', 0.00, 0.00, TRUE),
('2200', 'Verovelat', 'liability', NULL, 'Verovelat ja vakuudet', 0.00, 0.00, TRUE),
('2300', 'Ostovelat ja saamiset', 'liability', NULL, 'Ostovelat ja saamiset', 0.00, 0.00, TRUE),
('2400', 'Maksuvelat ja ennakot', 'liability', NULL, 'Maksuvelat ja saadut ennakot', 0.00, 0.00, TRUE),
('2500', 'Verovelat konserneille', 'liability', NULL, 'Verovelat konserneille', 0.00, 0.00, TRUE),
('2600', 'Muut velat', 'liability', NULL, 'Muut velat', 0.00, 0.00, TRUE),
('2700', 'Siirrot konserninointiin', 'liability', NULL, 'Siirrot konserninointiin', 0.00, 0.00, TRUE),
('2800', 'Tilikauden tuloverot', 'liability', NULL, 'Tilikauden tuloverot', 0.00, 0.00, TRUE),
('3000', 'Osakepääoma', 'equity', NULL, 'Osakepääoma', 0.00, 0.00, TRUE),
('3100', 'Sijoitetun pääoman rahastot', 'equity', NULL, 'Sijoitetun pääoman rahastot', 0.00, 0.00, TRUE),
('3200', 'Muut pääomat rahastot', 'equity', NULL, 'Muut pääomat rahastot', 0.00, 0.00, TRUE),
('3300', 'Tilikauden voitto', 'equity', NULL, 'Tilikauden voitto/tappio', 0.00, 0.00, TRUE),
('4000', 'Myyntituotot', 'revenue', NULL, 'Myyntituotot', 0.00, 0.00, TRUE),
('4100', 'Palvelutuotot', 'revenue', NULL, 'Palvelutuotot', 0.00, 0.00, TRUE),
('4200', 'Vuokratuotot', 'revenue', NULL, 'Vuokratuotot', 0.00, 0.00, TRUE),
('4300', 'Korko- ja valuuttatuotot', 'revenue', NULL, 'Korko- ja valuuttatuotot', 0.00, 0.00, TRUE),
('4400', 'Muu tuotto', 'revenue', NULL, 'Muu tuotto', 0.00, 0.00, TRUE),
('4500', 'Siirrot konserninointiin', 'revenue', NULL, 'Siirrot konserninointiin', 0.00, 0.00, TRUE),
('5000', 'Aineelliset kulut', 'expense', NULL, 'Aineelliset kulut ja palvelut', 0.00, 0.00, TRUE),
('5100', 'Henkilöstökulut', 'expense', NULL, 'Henkilöstökulut', 0.00, 0.00, TRUE),
('5200', 'Poistot ja alennukset', 'expense', NULL, 'Poistot ja alennukset', 0.00, 0.00, TRUE),
('5300', 'Vuokrat ja vuokrakulut', 'expense', NULL, 'Vuokrat ja vuokrakulut', 0.00, 0.00, TRUE),
('5400', 'Korko- ja rahoituskulut', 'expense', NULL, 'Korko- ja rahoituskulut', 0.00, 0.00, TRUE),
('5500', 'Tase-erät ja poistot', 'expense', NULL, 'Tase-erät ja poistot', 0.00, 0.00, TRUE),
('5600', 'Arvonmäärityksen alennukset', 'expense', NULL, 'Arvonmäärityksen alennukset', 0.00, 0.00, TRUE),
('5700', 'Verotukset ja maksut', 'expense', NULL, 'Verotukset ja maksut', 0.00, 0.00, TRUE),
('5800', 'Muut kulut', 'expense', NULL, 'Muut kulut', 0.00, 0.00, TRUE),
('5900', 'Siirrot konserninointiin', 'expense', NULL, 'Siirrot konserninointiin', 0.00, 0.00, TRUE);
