/**
* module
*/
@config_simulator: { defaultServerMode: "gui" }
@config_server_qtro: { useGeneratedMain: true }
module org.example.echomodule 1.0

/**
* \brief the brief
* the description
* continues \l http://qt.io
*/
@config: {id: "org.foo.id.1.0", qml_class_name: "UiEcho"}
interface Echo {
/**
* \brief brief message
*
* Some more documentation
*/
readonly string lastMessage;
int intValue;
var varValue;
@config: { getter_name: "isEchoEnabled" }
bool echoEnabled;
@config_simulator: {minimum: 10.}
real floatValue1;
@config_simulator: {maximum: 10.}
real floatValue2;
string stringValue;
model contactList;
Contact contact;
Combo combo;
list<int> intList;
list comboList;
WeekDay weekDay;
TestEnum testEnum;
real UPPERCASEPROPERTY;
/* TODO comment */
@config_simulator: { default: ["Hello Qt"] }
OnlyAStringInAStruct stringInAStructProperty;

// single line comment
string echo(string msg);
string id() const;
Combo getCombo();
void voidSlot();
void voidSlot2(int param);
void timer(int interval);
AirflowDirection flagMethod(AirflowDirection direction);
TestEnum enumMethod(TestEnum testEnum);

signal anotherChanged(AnotherStruct another);
signal foobar(string foo);
signal somethingHappened();
signal newValueAvailable(var newValue);
}

@config: {id: "org.foo.idz.1.0", zoned: true}
interface EchoZoned {

/**
* \brief brief message
*
* Some more documentation
*/
readonly string lastMessage;
int intValue;
var varValue;
@config_simulator: {domain: ["one", "two", "three"]}
string stringValue;
string unsupportedValue;
bool zonedValue;
bool valueWithDefault;
@config: { getter_name: "isEchoEnabled" }
bool echoEnabled;
AirflowDirection airflowDirection;
@config_simulator: {minimum: 10., maximum: 15.}
int rangedValue;
int rangedValueWithDefault;
Contact contact;
Combo combo;
list<int> intList;
list comboList;
WeekDay weekDay;
TestEnum testEnum;
real UPPERCASEPROPERTY;

string echo(string msg);
string id();
var varMethod();
Combo getCombo();
string timer(int interval);
AirflowDirection flagMethod(AirflowDirection direction);
TestEnum enumMethod(TestEnum testEnum);

signal anotherChanged(AnotherStruct another);
signal foobar(string foo);
signal somethingHappened();
signal newValueAvailable(var newValue);
}

/**
* \brief Control where the airflow goes
*/
flag AirflowDirection {
/**
* \brief Airflow to the windshield
*/
Windshield = 1,
/**
* \brief Airflow to the dashboard
*/
Dashboard = 2,
/**
* \brief Airflow to the floor
*/
Floor = 4
}

@config: { type: "DaysOfTheWeek" }
flag WeekDay {
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5
}

enum TestEnum {
FirstEnumValue = 1,
SecondEnumValue = 2
}

/**
* The contact information
*/
struct Contact {
string name;
int age;
bool isMarried;
var additionalData;
}

struct Combo {
Contact contactInfo;
WeekDay day;
}

struct AnotherStruct {
int justANumber;
}

/* AUTOSUITE-1340 */
struct OnlyAStringInAStruct {
string myString;
}