-- Skrypt tworzący tabelę kategorii kosztów

-- Sprawdzenie, czy tabela cost_categories istnieje
CREATE TABLE IF NOT EXISTS `cost_categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `description` text DEFAULT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `created_by` bigint(20) unsigned DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `created_by` (`created_by`),
  CONSTRAINT `cost_categories_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Dodanie kolumny category_id do tabeli costs, jeśli nie istnieje
ALTER TABLE `costs` ADD COLUMN IF NOT EXISTS `category_id` int(11) DEFAULT NULL;

-- Dodanie klucza obcego do tabeli costs
ALTER TABLE `costs` ADD CONSTRAINT `costs_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `cost_categories` (`id`) ON DELETE SET NULL;

-- Dodanie indeksu dla kolumny category_id
ALTER TABLE `costs` ADD INDEX IF NOT EXISTS `idx_category_id` (`category_id`);

-- Dodanie podstawowych kategorii kosztów
INSERT INTO `cost_categories` (`name`, `description`, `is_active`, `created_at`, `updated_at`) VALUES
('Materiały', 'Koszty związane z zakupem materiałów', 1, NOW(), NOW()),
('Transport', 'Koszty transportu i logistyki', 1, NOW(), NOW()),
('Wynagrodzenia', 'Koszty wynagrodzeń pracowników', 1, NOW(), NOW()),
('Narzędzia', 'Koszty zakupu i utrzymania narzędzi', 1, NOW(), NOW()),
('Usługi obce', 'Koszty usług świadczonych przez podmioty zewnętrzne', 1, NOW(), NOW()),
('Podatki i opłaty', 'Koszty podatków, opłat skarbowych i administracyjnych', 1, NOW(), NOW()),
('Ubezpieczenia', 'Koszty ubezpieczeń majątkowych, OC, AC itp.', 1, NOW(), NOW()),
('Marketing', 'Koszty działań marketingowych i promocyjnych', 1, NOW(), NOW()),
('Utrzymanie biura', 'Koszty związane z utrzymaniem biura', 1, NOW(), NOW()),
('Inne', 'Pozostałe koszty niesklasyfikowane w innych kategoriach', 1, NOW(), NOW()); 