<?xml version="1.0"?>
<ruleset name="Domain Dashboard Coding Standards">
    <description>PSR-12 + Security Rules for Domain Dashboard</description>

    <!-- Files to check -->
    <file>src</file>
    <file>public</file>
    <file>user-dashboard</file>
    <file>bootstrap</file>

    <!-- Exclude vendor and temporary files -->
    <exclude-pattern>*/vendor/*</exclude-pattern>
    <exclude-pattern>*.tmp.*</exclude-pattern>
    <exclude-pattern>*.bak</exclude-pattern>

    <!-- PSR-12 Coding Standard -->
    <rule ref="PSR12"/>

    <!-- Additional security rules -->
    <rule ref="Generic.PHP.ForbiddenFunctions">
        <properties>
            <property name="forbiddenFunctions" type="array">
                <element key="eval" value="null"/>
                <element key="exec" value="null"/>
                <element key="shell_exec" value="null"/>
                <element key="system" value="null"/>
                <element key="passthru" value="null"/>
                <element key="extract" value="null"/>
                <element key="parse_str" value="null"/>
                <element key="assert" value="null"/>
                <element key="create_function" value="null"/>
            </property>
        </properties>
    </rule>

    <!-- Require strict types declaration -->
    <rule ref="Generic.PHP.RequireStrictTypes"/>

    <!-- Code complexity limits -->
    <rule ref="Generic.Metrics.CyclomaticComplexity">
        <properties>
            <property name="complexity" value="7"/>
            <property name="absoluteComplexity" value="10"/>
        </properties>
    </rule>

    <rule ref="Generic.Metrics.NestingLevel">
        <properties>
            <property name="nestingLevel" value="3"/>
            <property name="absoluteNestingLevel" value="5"/>
        </properties>
    </rule>

    <!-- File size limits -->
    <rule ref="Generic.Files.LineLength">
        <properties>
            <property name="lineLimit" value="120"/>
            <property name="absoluteLineLimit" value="150"/>
        </properties>
    </rule>

    <!-- Show progress and use colors -->
    <arg name="colors"/>
    <arg value="p"/>
</ruleset>
