-- =====================================================
-- VendorOS - Ajout du champ supply_type pour TVA sur encaissements
-- Pour les comptes 401 (fournisseurs) et 411 (clients)
-- La TVA se calcule différemment pour les prestations de services
-- =====================================================

-- Ajouter le champ supply_type à la table vendoros_chart_of_accounts
ALTER TABLE `vendoros_chart_of_accounts` 
ADD COLUMN `supply_type` ENUM('goods', 'services', 'mixed', 'none') 
NOT NULL DEFAULT 'none' 
COMMENT 'Type de fourniture: goods = TVA sur débits, services = TVA sur encaissements'
AFTER `vat_type`;

-- Ajouter un champ pour le régime TVA spécifique
ALTER TABLE `vendoros_chart_of_accounts`
ADD COLUMN `vat_regime` ENUM('debits', 'encaissements', 'auto') 
NOT NULL DEFAULT 'auto' 
COMMENT 'Régime TVA: auto = selon supply_type, debits = forcé débits, encaissements = forcé encaissements'
AFTER `supply_type`;

-- Créer un index pour filtrer rapidement les comptes tiers avec supply_type
CREATE INDEX `idx_chart_supply_type` ON `vendoros_chart_of_accounts` (`account_class`, `supply_type`);

-- Mettre à jour les comptes 401 et 411 existants avec des valeurs par défaut logiques
-- Par défaut, on laisse 'none' car chaque compte auxiliaire peut être différent

-- Vue pour voir facilement les comptes tiers avec leur régime TVA
CREATE OR REPLACE VIEW `vendoros_vw_third_party_accounts` AS
SELECT 
    coa.id,
    coa.company_id,
    coa.account_number,
    coa.account_name,
    coa.account_class,
    coa.account_type,
    coa.supply_type,
    coa.vat_regime,
    CASE 
        WHEN coa.vat_regime = 'auto' THEN
            CASE coa.supply_type 
                WHEN 'goods' THEN 'debits'
                WHEN 'services' THEN 'encaissements'
                WHEN 'mixed' THEN 'encaissements' -- En cas de mixte, c'est l'encaissement qui prime
                ELSE 'debits'
            END
        ELSE coa.vat_regime
    END AS effective_vat_regime,
    CASE 
        WHEN LEFT(coa.account_number, 3) = '401' THEN 'supplier'
        WHEN LEFT(coa.account_number, 3) = '411' THEN 'customer'
        WHEN LEFT(coa.account_number, 2) = '42' THEN 'employee'
        WHEN LEFT(coa.account_number, 3) = '455' THEN 'associate'
        ELSE 'other'
    END AS partner_category
FROM `vendoros_chart_of_accounts` coa
WHERE coa.account_class = 4
AND (
    LEFT(coa.account_number, 3) IN ('401', '403', '404', '408', '409', '411', '413', '416', '418', '419')
    OR LEFT(coa.account_number, 2) IN ('42', '45')
)
ORDER BY coa.company_id, coa.account_number;

-- Table de log pour tracer les changements de régime TVA
CREATE TABLE IF NOT EXISTS `vendoros_vat_regime_changes` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `company_id` INT UNSIGNED NOT NULL,
    `account_id` INT UNSIGNED NOT NULL,
    `account_number` VARCHAR(10) NOT NULL,
    `old_supply_type` ENUM('goods', 'services', 'mixed', 'none') NULL,
    `new_supply_type` ENUM('goods', 'services', 'mixed', 'none') NOT NULL,
    `old_vat_regime` ENUM('debits', 'encaissements', 'auto') NULL,
    `new_vat_regime` ENUM('debits', 'encaissements', 'auto') NOT NULL,
    `changed_by` INT UNSIGNED NULL,
    `changed_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `reason` VARCHAR(255) NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_company_account` (`company_id`, `account_id`),
    INDEX `idx_changed_at` (`changed_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Commentaire explicatif pour la documentation
-- =====================================================
-- LOGIQUE TVA SUR ENCAISSEMENTS vs DÉBITS
-- =====================================================
-- 
-- Pour les BIENS (goods):
-- - TVA collectée (vente) : exigible à la facture
-- - TVA déductible (achat) : récupérable à la facture
--
-- Pour les SERVICES (services):
-- - TVA collectée (vente) : exigible à l'encaissement
-- - TVA déductible (achat) : récupérable au paiement fournisseur
--
-- Pour les MIXTES (mixed):
-- - TVA collectée : exigible à l'encaissement (règle prudente)
-- - TVA déductible : récupérable au paiement
--
-- Cette distinction est importante pour:
-- - La déclaration de TVA mensuelle/trimestrielle
-- - Le calcul de la TVA à reverser
-- - Le rapprochement des encaissements/décaissements
-- =====================================================
